//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS Backup service.
///
/// Backup Backup is a unified backup service designed to protect Amazon Web Services services and their associated data. Backup simplifies the creation, migration, restoration, and deletion of backups, while also providing reporting and auditing.
public struct Backup: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the Backup client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "Backup",
            serviceIdentifier: "backup",
            serviceProtocol: .restjson,
            apiVersion: "2018-11-15",
            endpoint: endpoint,
            errorType: BackupErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }





    // MARK: API Calls

    /// Associates an MPA approval team with a backup vault.
    @Sendable
    @inlinable
    public func associateBackupVaultMpaApprovalTeam(_ input: AssociateBackupVaultMpaApprovalTeamInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "AssociateBackupVaultMpaApprovalTeam", 
            path: "/backup-vaults/{BackupVaultName}/mpaApprovalTeam", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associates an MPA approval team with a backup vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of the backup vault to associate with the MPA approval team.
    ///   - mpaApprovalTeamArn: The Amazon Resource Name (ARN) of the MPA approval team to associate with the backup vault.
    ///   - requesterComment: A comment provided by the requester explaining the association request.
    ///   - logger: Logger use during operation
    @inlinable
    public func associateBackupVaultMpaApprovalTeam(
        backupVaultName: String,
        mpaApprovalTeamArn: String,
        requesterComment: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = AssociateBackupVaultMpaApprovalTeamInput(
            backupVaultName: backupVaultName, 
            mpaApprovalTeamArn: mpaApprovalTeamArn, 
            requesterComment: requesterComment
        )
        return try await self.associateBackupVaultMpaApprovalTeam(input, logger: logger)
    }

    /// Removes the specified legal hold on a recovery point. This action can only be performed by a user with sufficient permissions.
    @Sendable
    @inlinable
    public func cancelLegalHold(_ input: CancelLegalHoldInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelLegalHoldOutput {
        try await self.client.execute(
            operation: "CancelLegalHold", 
            path: "/legal-holds/{LegalHoldId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the specified legal hold on a recovery point. This action can only be performed by a user with sufficient permissions.
    ///
    /// Parameters:
    ///   - cancelDescription: A string the describes the reason for removing the legal hold.
    ///   - legalHoldId: The ID of the legal hold.
    ///   - retainRecordInDays: The integer amount, in days, after which to remove legal hold.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelLegalHold(
        cancelDescription: String,
        legalHoldId: String,
        retainRecordInDays: Int64? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelLegalHoldOutput {
        let input = CancelLegalHoldInput(
            cancelDescription: cancelDescription, 
            legalHoldId: legalHoldId, 
            retainRecordInDays: retainRecordInDays
        )
        return try await self.cancelLegalHold(input, logger: logger)
    }

    /// Creates a backup plan using a backup plan name and backup rules. A backup plan is a document that contains information that Backup uses to schedule tasks that create recovery points for resources. If you call CreateBackupPlan with a plan that already exists, you receive an AlreadyExistsException exception.
    @Sendable
    @inlinable
    public func createBackupPlan(_ input: CreateBackupPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBackupPlanOutput {
        try await self.client.execute(
            operation: "CreateBackupPlan", 
            path: "/backup/plans", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a backup plan using a backup plan name and backup rules. A backup plan is a document that contains information that Backup uses to schedule tasks that create recovery points for resources. If you call CreateBackupPlan with a plan that already exists, you receive an AlreadyExistsException exception.
    ///
    /// Parameters:
    ///   - backupPlan: The body of a backup plan. Includes a BackupPlanName and one or more sets of Rules.
    ///   - backupPlanTags: The tags to assign to the backup plan.
    ///   - creatorRequestId: Identifies the request and allows failed requests to be retried without the risk of running the operation twice. If the request includes a CreatorRequestId that matches an existing backup plan, that plan is returned. This parameter is optional. If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBackupPlan(
        backupPlan: BackupPlanInput,
        backupPlanTags: [String: String]? = nil,
        creatorRequestId: String? = CreateBackupPlanInput.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBackupPlanOutput {
        let input = CreateBackupPlanInput(
            backupPlan: backupPlan, 
            backupPlanTags: backupPlanTags, 
            creatorRequestId: creatorRequestId
        )
        return try await self.createBackupPlan(input, logger: logger)
    }

    /// Creates a JSON document that specifies a set of resources to assign to a backup plan. For examples, see Assigning resources programmatically.
    @Sendable
    @inlinable
    public func createBackupSelection(_ input: CreateBackupSelectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBackupSelectionOutput {
        try await self.client.execute(
            operation: "CreateBackupSelection", 
            path: "/backup/plans/{BackupPlanId}/selections", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a JSON document that specifies a set of resources to assign to a backup plan. For examples, see Assigning resources programmatically.
    ///
    /// Parameters:
    ///   - backupPlanId: The ID of the backup plan.
    ///   - backupSelection: The body of a request to assign a set of resources to a backup plan.
    ///   - creatorRequestId: A unique string that identifies the request and allows failed requests to be retried without the risk of running the operation twice. This parameter is optional. If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBackupSelection(
        backupPlanId: String,
        backupSelection: BackupSelection,
        creatorRequestId: String? = CreateBackupSelectionInput.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBackupSelectionOutput {
        let input = CreateBackupSelectionInput(
            backupPlanId: backupPlanId, 
            backupSelection: backupSelection, 
            creatorRequestId: creatorRequestId
        )
        return try await self.createBackupSelection(input, logger: logger)
    }

    /// Creates a logical container where backups are stored. A CreateBackupVault request includes a name, optionally one or more resource tags, an encryption key, and a request ID.  Do not include sensitive data, such as passport numbers, in the name of a backup vault.
    @Sendable
    @inlinable
    public func createBackupVault(_ input: CreateBackupVaultInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBackupVaultOutput {
        try await self.client.execute(
            operation: "CreateBackupVault", 
            path: "/backup-vaults/{BackupVaultName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a logical container where backups are stored. A CreateBackupVault request includes a name, optionally one or more resource tags, an encryption key, and a request ID.  Do not include sensitive data, such as passport numbers, in the name of a backup vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created. They consist of letters, numbers, and hyphens.
    ///   - backupVaultTags: The tags to assign to the backup vault.
    ///   - creatorRequestId: A unique string that identifies the request and allows failed requests to be retried without the risk of running the operation twice. This parameter is optional. If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.
    ///   - encryptionKeyArn: The server-side encryption key that is used to protect your backups; for example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBackupVault(
        backupVaultName: String,
        backupVaultTags: [String: String]? = nil,
        creatorRequestId: String? = CreateBackupVaultInput.idempotencyToken(),
        encryptionKeyArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBackupVaultOutput {
        let input = CreateBackupVaultInput(
            backupVaultName: backupVaultName, 
            backupVaultTags: backupVaultTags, 
            creatorRequestId: creatorRequestId, 
            encryptionKeyArn: encryptionKeyArn
        )
        return try await self.createBackupVault(input, logger: logger)
    }

    /// Creates a framework with one or more controls. A framework is a collection of controls that you can use to evaluate your backup practices. By using pre-built customizable controls to define your policies, you can evaluate whether your backup practices comply with your policies and which resources are not yet in compliance.
    @Sendable
    @inlinable
    public func createFramework(_ input: CreateFrameworkInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFrameworkOutput {
        try await self.client.execute(
            operation: "CreateFramework", 
            path: "/audit/frameworks", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a framework with one or more controls. A framework is a collection of controls that you can use to evaluate your backup practices. By using pre-built customizable controls to define your policies, you can evaluate whether your backup practices comply with your policies and which resources are not yet in compliance.
    ///
    /// Parameters:
    ///   - frameworkControls: The controls that make up the framework. Each control in the list has a name, input parameters, and scope.
    ///   - frameworkDescription: An optional description of the framework with a maximum of 1,024 characters.
    ///   - frameworkName: The unique name of the framework. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).
    ///   - frameworkTags: The tags to assign to the framework.
    ///   - idempotencyToken: A customer-chosen string that you can use to distinguish between otherwise identical calls to CreateFrameworkInput. Retrying a successful request with the same idempotency token results in a success message with no action taken.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFramework(
        frameworkControls: [FrameworkControl],
        frameworkDescription: String? = nil,
        frameworkName: String,
        frameworkTags: [String: String]? = nil,
        idempotencyToken: String? = CreateFrameworkInput.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFrameworkOutput {
        let input = CreateFrameworkInput(
            frameworkControls: frameworkControls, 
            frameworkDescription: frameworkDescription, 
            frameworkName: frameworkName, 
            frameworkTags: frameworkTags, 
            idempotencyToken: idempotencyToken
        )
        return try await self.createFramework(input, logger: logger)
    }

    /// Creates a legal hold on a recovery point (backup). A legal hold is a restraint on altering or deleting a backup until an authorized user cancels the legal hold. Any actions to delete or disassociate a recovery point will fail with an error if one or more active legal holds are on the recovery point.
    @Sendable
    @inlinable
    public func createLegalHold(_ input: CreateLegalHoldInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateLegalHoldOutput {
        try await self.client.execute(
            operation: "CreateLegalHold", 
            path: "/legal-holds", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a legal hold on a recovery point (backup). A legal hold is a restraint on altering or deleting a backup until an authorized user cancels the legal hold. Any actions to delete or disassociate a recovery point will fail with an error if one or more active legal holds are on the recovery point.
    ///
    /// Parameters:
    ///   - description: The description of the legal hold.
    ///   - idempotencyToken: This is a user-chosen string used to distinguish between otherwise identical  calls. Retrying a successful request with the  same idempotency token results in a success message with no action taken.
    ///   - recoveryPointSelection: The criteria to assign a set of resources, such as resource types or backup vaults.
    ///   - tags: Optional tags to include. A tag is a key-value pair you can use to manage,  filter, and search for your resources. Allowed characters include UTF-8 letters,  numbers, spaces, and the following characters: + - = . _ : /.
    ///   - title: The title of the legal hold.
    ///   - logger: Logger use during operation
    @inlinable
    public func createLegalHold(
        description: String,
        idempotencyToken: String? = CreateLegalHoldInput.idempotencyToken(),
        recoveryPointSelection: RecoveryPointSelection? = nil,
        tags: [String: String]? = nil,
        title: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateLegalHoldOutput {
        let input = CreateLegalHoldInput(
            description: description, 
            idempotencyToken: idempotencyToken, 
            recoveryPointSelection: recoveryPointSelection, 
            tags: tags, 
            title: title
        )
        return try await self.createLegalHold(input, logger: logger)
    }

    /// Creates a logical container to where backups may be copied. This request includes a name, the Region, the maximum number of retention days, the  minimum number of retention days, and optionally can include tags and a creator request  ID.  Do not include sensitive data, such as passport numbers, in the name of a backup vault.
    @Sendable
    @inlinable
    public func createLogicallyAirGappedBackupVault(_ input: CreateLogicallyAirGappedBackupVaultInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateLogicallyAirGappedBackupVaultOutput {
        try await self.client.execute(
            operation: "CreateLogicallyAirGappedBackupVault", 
            path: "/logically-air-gapped-backup-vaults/{BackupVaultName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a logical container to where backups may be copied. This request includes a name, the Region, the maximum number of retention days, the  minimum number of retention days, and optionally can include tags and a creator request  ID.  Do not include sensitive data, such as passport numbers, in the name of a backup vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Logically air-gapped  backup vaults are identified by names that are unique to the account used to create  them and the Region where they are created.
    ///   - backupVaultTags: The tags to assign to the vault.
    ///   - creatorRequestId: The ID of the creation request. This parameter is optional. If used, this parameter must contain  1 to 50 alphanumeric or '-_.' characters.
    ///   - maxRetentionDays: The maximum retention period that the vault retains its recovery points.
    ///   - minRetentionDays: This setting specifies the minimum retention period that the vault retains its recovery points. The minimum value accepted is 7 days.
    ///   - logger: Logger use during operation
    @inlinable
    public func createLogicallyAirGappedBackupVault(
        backupVaultName: String,
        backupVaultTags: [String: String]? = nil,
        creatorRequestId: String? = CreateLogicallyAirGappedBackupVaultInput.idempotencyToken(),
        maxRetentionDays: Int64,
        minRetentionDays: Int64,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateLogicallyAirGappedBackupVaultOutput {
        let input = CreateLogicallyAirGappedBackupVaultInput(
            backupVaultName: backupVaultName, 
            backupVaultTags: backupVaultTags, 
            creatorRequestId: creatorRequestId, 
            maxRetentionDays: maxRetentionDays, 
            minRetentionDays: minRetentionDays
        )
        return try await self.createLogicallyAirGappedBackupVault(input, logger: logger)
    }

    /// Creates a report plan. A report plan is a document that contains information about the contents of the report and where Backup will deliver it. If you call CreateReportPlan with a plan that already exists, you receive an AlreadyExistsException exception.
    @Sendable
    @inlinable
    public func createReportPlan(_ input: CreateReportPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateReportPlanOutput {
        try await self.client.execute(
            operation: "CreateReportPlan", 
            path: "/audit/report-plans", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a report plan. A report plan is a document that contains information about the contents of the report and where Backup will deliver it. If you call CreateReportPlan with a plan that already exists, you receive an AlreadyExistsException exception.
    ///
    /// Parameters:
    ///   - idempotencyToken: A customer-chosen string that you can use to distinguish between otherwise identical calls to CreateReportPlanInput. Retrying a successful request with the same idempotency token results in a success message with no action taken.
    ///   - reportDeliveryChannel: A structure that contains information about where and how to deliver your reports, specifically your Amazon S3 bucket name, S3 key prefix, and the formats of your reports.
    ///   - reportPlanDescription: An optional description of the report plan with a maximum of 1,024 characters.
    ///   - reportPlanName: The unique name of the report plan. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).
    ///   - reportPlanTags: The tags to assign to the report plan.
    ///   - reportSetting: Identifies the report template for the report. Reports are built using a report template. The report templates are:  RESOURCE_COMPLIANCE_REPORT | CONTROL_COMPLIANCE_REPORT | BACKUP_JOB_REPORT | COPY_JOB_REPORT | RESTORE_JOB_REPORT  If the report template is RESOURCE_COMPLIANCE_REPORT or CONTROL_COMPLIANCE_REPORT, this API resource also describes the report coverage by Amazon Web Services Regions and frameworks.
    ///   - logger: Logger use during operation
    @inlinable
    public func createReportPlan(
        idempotencyToken: String? = CreateReportPlanInput.idempotencyToken(),
        reportDeliveryChannel: ReportDeliveryChannel,
        reportPlanDescription: String? = nil,
        reportPlanName: String,
        reportPlanTags: [String: String]? = nil,
        reportSetting: ReportSetting,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateReportPlanOutput {
        let input = CreateReportPlanInput(
            idempotencyToken: idempotencyToken, 
            reportDeliveryChannel: reportDeliveryChannel, 
            reportPlanDescription: reportPlanDescription, 
            reportPlanName: reportPlanName, 
            reportPlanTags: reportPlanTags, 
            reportSetting: reportSetting
        )
        return try await self.createReportPlan(input, logger: logger)
    }

    /// Creates a restore access backup vault that provides temporary access to recovery points in a logically air-gapped backup vault, subject to MPA approval.
    @Sendable
    @inlinable
    public func createRestoreAccessBackupVault(_ input: CreateRestoreAccessBackupVaultInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRestoreAccessBackupVaultOutput {
        try await self.client.execute(
            operation: "CreateRestoreAccessBackupVault", 
            path: "/restore-access-backup-vaults", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a restore access backup vault that provides temporary access to recovery points in a logically air-gapped backup vault, subject to MPA approval.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of the backup vault to associate with an MPA approval team.
    ///   - backupVaultTags: Optional tags to assign to the restore access backup vault.
    ///   - creatorRequestId: A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
    ///   - requesterComment: A comment explaining the reason for requesting restore access to the backup vault.
    ///   - sourceBackupVaultArn: The ARN of the source backup vault containing the recovery points to which temporary access is requested.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRestoreAccessBackupVault(
        backupVaultName: String? = nil,
        backupVaultTags: [String: String]? = nil,
        creatorRequestId: String? = CreateRestoreAccessBackupVaultInput.idempotencyToken(),
        requesterComment: String? = nil,
        sourceBackupVaultArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRestoreAccessBackupVaultOutput {
        let input = CreateRestoreAccessBackupVaultInput(
            backupVaultName: backupVaultName, 
            backupVaultTags: backupVaultTags, 
            creatorRequestId: creatorRequestId, 
            requesterComment: requesterComment, 
            sourceBackupVaultArn: sourceBackupVaultArn
        )
        return try await self.createRestoreAccessBackupVault(input, logger: logger)
    }

    /// Creates a restore testing plan. The first of two steps to create a restore testing  plan. After this request is successful, finish the procedure using  CreateRestoreTestingSelection.
    @Sendable
    @inlinable
    public func createRestoreTestingPlan(_ input: CreateRestoreTestingPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRestoreTestingPlanOutput {
        try await self.client.execute(
            operation: "CreateRestoreTestingPlan", 
            path: "/restore-testing/plans", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a restore testing plan. The first of two steps to create a restore testing  plan. After this request is successful, finish the procedure using  CreateRestoreTestingSelection.
    ///
    /// Parameters:
    ///   - creatorRequestId: This is a unique string that identifies the request and  allows failed requests to be retriedwithout the risk of running  the operation twice. This parameter is optional. If used, this  parameter must contain 1 to 50 alphanumeric or '-_.' characters.
    ///   - restoreTestingPlan: A restore testing plan must contain a unique RestoreTestingPlanName string you create and must contain a ScheduleExpression cron. You may optionally include a StartWindowHours integer and a CreatorRequestId string. The RestoreTestingPlanName is a unique string that is the name of the restore testing plan. This cannot be changed after creation, and it must consist of only alphanumeric characters and underscores.
    ///   - tags: The tags to assign to the restore testing plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRestoreTestingPlan(
        creatorRequestId: String? = nil,
        restoreTestingPlan: RestoreTestingPlanForCreate,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRestoreTestingPlanOutput {
        let input = CreateRestoreTestingPlanInput(
            creatorRequestId: creatorRequestId, 
            restoreTestingPlan: restoreTestingPlan, 
            tags: tags
        )
        return try await self.createRestoreTestingPlan(input, logger: logger)
    }

    /// This request can be sent after CreateRestoreTestingPlan request  returns successfully. This is the second part of creating a resource testing  plan, and it must be completed sequentially. This consists of RestoreTestingSelectionName, ProtectedResourceType, and one of the following:    ProtectedResourceArns     ProtectedResourceConditions    Each protected resource type can have one single value. A restore testing selection can include a wildcard value ("*") for ProtectedResourceArns along with ProtectedResourceConditions. Alternatively, you can include up to 30 specific protected resource ARNs in ProtectedResourceArns. Cannot select by both protected resource types AND specific ARNs.  Request will fail if both are included.
    @Sendable
    @inlinable
    public func createRestoreTestingSelection(_ input: CreateRestoreTestingSelectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRestoreTestingSelectionOutput {
        try await self.client.execute(
            operation: "CreateRestoreTestingSelection", 
            path: "/restore-testing/plans/{RestoreTestingPlanName}/selections", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request can be sent after CreateRestoreTestingPlan request  returns successfully. This is the second part of creating a resource testing  plan, and it must be completed sequentially. This consists of RestoreTestingSelectionName, ProtectedResourceType, and one of the following:    ProtectedResourceArns     ProtectedResourceConditions    Each protected resource type can have one single value. A restore testing selection can include a wildcard value ("*") for ProtectedResourceArns along with ProtectedResourceConditions. Alternatively, you can include up to 30 specific protected resource ARNs in ProtectedResourceArns. Cannot select by both protected resource types AND specific ARNs.  Request will fail if both are included.
    ///
    /// Parameters:
    ///   - creatorRequestId: This is an optional unique string that identifies the request and allows  failed requests to be retried without the risk of running the operation  twice. If used, this parameter must contain  1 to 50 alphanumeric or '-_.' characters.
    ///   - restoreTestingPlanName: Input the restore testing plan name that was returned from the  related CreateRestoreTestingPlan request.
    ///   - restoreTestingSelection: This consists of RestoreTestingSelectionName, ProtectedResourceType, and one of the following:    ProtectedResourceArns     ProtectedResourceConditions    Each protected resource type can have one single value. A restore testing selection can include a wildcard value ("*") for ProtectedResourceArns along with ProtectedResourceConditions. Alternatively, you can include up to 30 specific protected resource ARNs in ProtectedResourceArns.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRestoreTestingSelection(
        creatorRequestId: String? = nil,
        restoreTestingPlanName: String,
        restoreTestingSelection: RestoreTestingSelectionForCreate,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRestoreTestingSelectionOutput {
        let input = CreateRestoreTestingSelectionInput(
            creatorRequestId: creatorRequestId, 
            restoreTestingPlanName: restoreTestingPlanName, 
            restoreTestingSelection: restoreTestingSelection
        )
        return try await self.createRestoreTestingSelection(input, logger: logger)
    }

    /// Deletes a backup plan. A backup plan can only be deleted after all associated selections of resources have been deleted. Deleting a backup plan deletes the current version of a backup plan. Previous versions, if any, will still exist.
    @Sendable
    @inlinable
    public func deleteBackupPlan(_ input: DeleteBackupPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteBackupPlanOutput {
        try await self.client.execute(
            operation: "DeleteBackupPlan", 
            path: "/backup/plans/{BackupPlanId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a backup plan. A backup plan can only be deleted after all associated selections of resources have been deleted. Deleting a backup plan deletes the current version of a backup plan. Previous versions, if any, will still exist.
    ///
    /// Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBackupPlan(
        backupPlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteBackupPlanOutput {
        let input = DeleteBackupPlanInput(
            backupPlanId: backupPlanId
        )
        return try await self.deleteBackupPlan(input, logger: logger)
    }

    /// Deletes the resource selection associated with a backup plan that is specified by the SelectionId.
    @Sendable
    @inlinable
    public func deleteBackupSelection(_ input: DeleteBackupSelectionInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteBackupSelection", 
            path: "/backup/plans/{BackupPlanId}/selections/{SelectionId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the resource selection associated with a backup plan that is specified by the SelectionId.
    ///
    /// Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - selectionId: Uniquely identifies the body of a request to assign a set of resources to a backup plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBackupSelection(
        backupPlanId: String,
        selectionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteBackupSelectionInput(
            backupPlanId: backupPlanId, 
            selectionId: selectionId
        )
        return try await self.deleteBackupSelection(input, logger: logger)
    }

    /// Deletes the backup vault identified by its name. A vault can be deleted only if it is empty.
    @Sendable
    @inlinable
    public func deleteBackupVault(_ input: DeleteBackupVaultInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteBackupVault", 
            path: "/backup-vaults/{BackupVaultName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the backup vault identified by its name. A vault can be deleted only if it is empty.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBackupVault(
        backupVaultName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteBackupVaultInput(
            backupVaultName: backupVaultName
        )
        return try await self.deleteBackupVault(input, logger: logger)
    }

    /// Deletes the policy document that manages permissions on a backup vault.
    @Sendable
    @inlinable
    public func deleteBackupVaultAccessPolicy(_ input: DeleteBackupVaultAccessPolicyInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteBackupVaultAccessPolicy", 
            path: "/backup-vaults/{BackupVaultName}/access-policy", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the policy document that manages permissions on a backup vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created. They consist of lowercase letters, numbers, and hyphens.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBackupVaultAccessPolicy(
        backupVaultName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteBackupVaultAccessPolicyInput(
            backupVaultName: backupVaultName
        )
        return try await self.deleteBackupVaultAccessPolicy(input, logger: logger)
    }

    /// Deletes Backup Vault Lock from a backup vault specified by a backup vault name. If the Vault Lock configuration is immutable, then you cannot delete Vault Lock using API operations, and you will receive an InvalidRequestException if you attempt to do so. For more information, see Vault Lock in the Backup Developer Guide.
    @Sendable
    @inlinable
    public func deleteBackupVaultLockConfiguration(_ input: DeleteBackupVaultLockConfigurationInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteBackupVaultLockConfiguration", 
            path: "/backup-vaults/{BackupVaultName}/vault-lock", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes Backup Vault Lock from a backup vault specified by a backup vault name. If the Vault Lock configuration is immutable, then you cannot delete Vault Lock using API operations, and you will receive an InvalidRequestException if you attempt to do so. For more information, see Vault Lock in the Backup Developer Guide.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of the backup vault from which to delete Backup Vault Lock.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBackupVaultLockConfiguration(
        backupVaultName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteBackupVaultLockConfigurationInput(
            backupVaultName: backupVaultName
        )
        return try await self.deleteBackupVaultLockConfiguration(input, logger: logger)
    }

    /// Deletes event notifications for the specified backup vault.
    @Sendable
    @inlinable
    public func deleteBackupVaultNotifications(_ input: DeleteBackupVaultNotificationsInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteBackupVaultNotifications", 
            path: "/backup-vaults/{BackupVaultName}/notification-configuration", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes event notifications for the specified backup vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBackupVaultNotifications(
        backupVaultName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteBackupVaultNotificationsInput(
            backupVaultName: backupVaultName
        )
        return try await self.deleteBackupVaultNotifications(input, logger: logger)
    }

    /// Deletes the framework specified by a framework name.
    @Sendable
    @inlinable
    public func deleteFramework(_ input: DeleteFrameworkInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteFramework", 
            path: "/audit/frameworks/{FrameworkName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the framework specified by a framework name.
    ///
    /// Parameters:
    ///   - frameworkName: The unique name of a framework.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFramework(
        frameworkName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteFrameworkInput(
            frameworkName: frameworkName
        )
        return try await self.deleteFramework(input, logger: logger)
    }

    /// Deletes the recovery point specified by a recovery point ID. If the recovery point ID belongs to a continuous backup, calling this endpoint deletes the existing continuous backup and stops future continuous backup. When an IAM role's permissions are insufficient to call this API, the service sends back an HTTP 200 response with an empty HTTP body, but the recovery point is not deleted. Instead, it enters an EXPIRED state.  EXPIRED recovery points can be deleted with this API once the IAM role has the iam:CreateServiceLinkedRole action. To learn more about adding this role, see   Troubleshooting manual deletions. If the user or role is deleted or the permission within the role is removed,  the deletion will not be successful and will enter an EXPIRED state.
    @Sendable
    @inlinable
    public func deleteRecoveryPoint(_ input: DeleteRecoveryPointInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteRecoveryPoint", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points/{RecoveryPointArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the recovery point specified by a recovery point ID. If the recovery point ID belongs to a continuous backup, calling this endpoint deletes the existing continuous backup and stops future continuous backup. When an IAM role's permissions are insufficient to call this API, the service sends back an HTTP 200 response with an empty HTTP body, but the recovery point is not deleted. Instead, it enters an EXPIRED state.  EXPIRED recovery points can be deleted with this API once the IAM role has the iam:CreateServiceLinkedRole action. To learn more about adding this role, see   Troubleshooting manual deletions. If the user or role is deleted or the permission within the role is removed,  the deletion will not be successful and will enter an EXPIRED state.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - recoveryPointArn: An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRecoveryPoint(
        backupVaultName: String,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteRecoveryPointInput(
            backupVaultName: backupVaultName, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.deleteRecoveryPoint(input, logger: logger)
    }

    /// Deletes the report plan specified by a report plan name.
    @Sendable
    @inlinable
    public func deleteReportPlan(_ input: DeleteReportPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteReportPlan", 
            path: "/audit/report-plans/{ReportPlanName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the report plan specified by a report plan name.
    ///
    /// Parameters:
    ///   - reportPlanName: The unique name of a report plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteReportPlan(
        reportPlanName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteReportPlanInput(
            reportPlanName: reportPlanName
        )
        return try await self.deleteReportPlan(input, logger: logger)
    }

    /// This request deletes the specified restore testing plan. Deletion can only successfully occur if all associated  restore testing selections are deleted first.
    @Sendable
    @inlinable
    public func deleteRestoreTestingPlan(_ input: DeleteRestoreTestingPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteRestoreTestingPlan", 
            path: "/restore-testing/plans/{RestoreTestingPlanName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request deletes the specified restore testing plan. Deletion can only successfully occur if all associated  restore testing selections are deleted first.
    ///
    /// Parameters:
    ///   - restoreTestingPlanName: Required unique name of the restore testing plan you wish  to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRestoreTestingPlan(
        restoreTestingPlanName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteRestoreTestingPlanInput(
            restoreTestingPlanName: restoreTestingPlanName
        )
        return try await self.deleteRestoreTestingPlan(input, logger: logger)
    }

    /// Input the Restore Testing Plan name and Restore Testing Selection  name. All testing selections associated with a restore testing plan must  be deleted before the restore testing plan can be deleted.
    @Sendable
    @inlinable
    public func deleteRestoreTestingSelection(_ input: DeleteRestoreTestingSelectionInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteRestoreTestingSelection", 
            path: "/restore-testing/plans/{RestoreTestingPlanName}/selections/{RestoreTestingSelectionName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Input the Restore Testing Plan name and Restore Testing Selection  name. All testing selections associated with a restore testing plan must  be deleted before the restore testing plan can be deleted.
    ///
    /// Parameters:
    ///   - restoreTestingPlanName: Required unique name of the restore testing plan that contains the  restore testing selection you wish to delete.
    ///   - restoreTestingSelectionName: Required unique name of the restore testing selection you  wish to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRestoreTestingSelection(
        restoreTestingPlanName: String,
        restoreTestingSelectionName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteRestoreTestingSelectionInput(
            restoreTestingPlanName: restoreTestingPlanName, 
            restoreTestingSelectionName: restoreTestingSelectionName
        )
        return try await self.deleteRestoreTestingSelection(input, logger: logger)
    }

    /// Returns backup job details for the specified BackupJobId.
    @Sendable
    @inlinable
    public func describeBackupJob(_ input: DescribeBackupJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeBackupJobOutput {
        try await self.client.execute(
            operation: "DescribeBackupJob", 
            path: "/backup-jobs/{BackupJobId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns backup job details for the specified BackupJobId.
    ///
    /// Parameters:
    ///   - backupJobId: Uniquely identifies a request to Backup to back up a resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeBackupJob(
        backupJobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeBackupJobOutput {
        let input = DescribeBackupJobInput(
            backupJobId: backupJobId
        )
        return try await self.describeBackupJob(input, logger: logger)
    }

    /// Returns metadata about a backup vault specified by its name.
    @Sendable
    @inlinable
    public func describeBackupVault(_ input: DescribeBackupVaultInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeBackupVaultOutput {
        try await self.client.execute(
            operation: "DescribeBackupVault", 
            path: "/backup-vaults/{BackupVaultName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns metadata about a backup vault specified by its name.
    ///
    /// Parameters:
    ///   - backupVaultAccountId: The account ID of the specified backup vault.
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeBackupVault(
        backupVaultAccountId: String? = nil,
        backupVaultName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeBackupVaultOutput {
        let input = DescribeBackupVaultInput(
            backupVaultAccountId: backupVaultAccountId, 
            backupVaultName: backupVaultName
        )
        return try await self.describeBackupVault(input, logger: logger)
    }

    /// Returns metadata associated with creating a copy of a resource.
    @Sendable
    @inlinable
    public func describeCopyJob(_ input: DescribeCopyJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCopyJobOutput {
        try await self.client.execute(
            operation: "DescribeCopyJob", 
            path: "/copy-jobs/{CopyJobId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns metadata associated with creating a copy of a resource.
    ///
    /// Parameters:
    ///   - copyJobId: Uniquely identifies a copy job.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeCopyJob(
        copyJobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeCopyJobOutput {
        let input = DescribeCopyJobInput(
            copyJobId: copyJobId
        )
        return try await self.describeCopyJob(input, logger: logger)
    }

    /// Returns the framework details for the specified FrameworkName.
    @Sendable
    @inlinable
    public func describeFramework(_ input: DescribeFrameworkInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFrameworkOutput {
        try await self.client.execute(
            operation: "DescribeFramework", 
            path: "/audit/frameworks/{FrameworkName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the framework details for the specified FrameworkName.
    ///
    /// Parameters:
    ///   - frameworkName: The unique name of a framework.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFramework(
        frameworkName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFrameworkOutput {
        let input = DescribeFrameworkInput(
            frameworkName: frameworkName
        )
        return try await self.describeFramework(input, logger: logger)
    }

    /// Describes whether the Amazon Web Services account is opted in to cross-account backup. Returns an error if the account is not a member of an Organizations organization. Example: describe-global-settings --region us-west-2
    @Sendable
    @inlinable
    public func describeGlobalSettings(_ input: DescribeGlobalSettingsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeGlobalSettingsOutput {
        try await self.client.execute(
            operation: "DescribeGlobalSettings", 
            path: "/global-settings", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes whether the Amazon Web Services account is opted in to cross-account backup. Returns an error if the account is not a member of an Organizations organization. Example: describe-global-settings --region us-west-2
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeGlobalSettings(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeGlobalSettingsOutput {
        let input = DescribeGlobalSettingsInput(
        )
        return try await self.describeGlobalSettings(input, logger: logger)
    }

    /// Returns information about a saved resource, including the last time it was backed up, its Amazon Resource Name (ARN), and the Amazon Web Services service type of the saved resource.
    @Sendable
    @inlinable
    public func describeProtectedResource(_ input: DescribeProtectedResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeProtectedResourceOutput {
        try await self.client.execute(
            operation: "DescribeProtectedResource", 
            path: "/resources/{ResourceArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a saved resource, including the last time it was backed up, its Amazon Resource Name (ARN), and the Amazon Web Services service type of the saved resource.
    ///
    /// Parameters:
    ///   - resourceArn: An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the resource type.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeProtectedResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeProtectedResourceOutput {
        let input = DescribeProtectedResourceInput(
            resourceArn: resourceArn
        )
        return try await self.describeProtectedResource(input, logger: logger)
    }

    /// Returns metadata associated with a recovery point, including ID, status, encryption, and lifecycle.
    @Sendable
    @inlinable
    public func describeRecoveryPoint(_ input: DescribeRecoveryPointInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRecoveryPointOutput {
        try await self.client.execute(
            operation: "DescribeRecoveryPoint", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points/{RecoveryPointArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns metadata associated with a recovery point, including ID, status, encryption, and lifecycle.
    ///
    /// Parameters:
    ///   - backupVaultAccountId: The account ID of the specified backup vault.
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - recoveryPointArn: An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRecoveryPoint(
        backupVaultAccountId: String? = nil,
        backupVaultName: String,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRecoveryPointOutput {
        let input = DescribeRecoveryPointInput(
            backupVaultAccountId: backupVaultAccountId, 
            backupVaultName: backupVaultName, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.describeRecoveryPoint(input, logger: logger)
    }

    /// Returns the current service opt-in settings for the Region. If service opt-in is enabled for a service, Backup tries to protect that service's resources in this Region, when the resource is included in an on-demand backup or scheduled backup plan. Otherwise, Backup does not try to protect that service's resources in this Region.
    @Sendable
    @inlinable
    public func describeRegionSettings(_ input: DescribeRegionSettingsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRegionSettingsOutput {
        try await self.client.execute(
            operation: "DescribeRegionSettings", 
            path: "/account-settings", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the current service opt-in settings for the Region. If service opt-in is enabled for a service, Backup tries to protect that service's resources in this Region, when the resource is included in an on-demand backup or scheduled backup plan. Otherwise, Backup does not try to protect that service's resources in this Region.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRegionSettings(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRegionSettingsOutput {
        let input = DescribeRegionSettingsInput(
        )
        return try await self.describeRegionSettings(input, logger: logger)
    }

    /// Returns the details associated with creating a report as specified by its ReportJobId.
    @Sendable
    @inlinable
    public func describeReportJob(_ input: DescribeReportJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeReportJobOutput {
        try await self.client.execute(
            operation: "DescribeReportJob", 
            path: "/audit/report-jobs/{ReportJobId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the details associated with creating a report as specified by its ReportJobId.
    ///
    /// Parameters:
    ///   - reportJobId: The identifier of the report job. A unique, randomly generated, Unicode, UTF-8 encoded string that is at most 1,024 bytes long. The report job ID cannot be edited.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeReportJob(
        reportJobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeReportJobOutput {
        let input = DescribeReportJobInput(
            reportJobId: reportJobId
        )
        return try await self.describeReportJob(input, logger: logger)
    }

    /// Returns a list of all report plans for an Amazon Web Services account and Amazon Web Services Region.
    @Sendable
    @inlinable
    public func describeReportPlan(_ input: DescribeReportPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeReportPlanOutput {
        try await self.client.execute(
            operation: "DescribeReportPlan", 
            path: "/audit/report-plans/{ReportPlanName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of all report plans for an Amazon Web Services account and Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - reportPlanName: The unique name of a report plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeReportPlan(
        reportPlanName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeReportPlanOutput {
        let input = DescribeReportPlanInput(
            reportPlanName: reportPlanName
        )
        return try await self.describeReportPlan(input, logger: logger)
    }

    /// Returns metadata associated with a restore job that is specified by a job ID.
    @Sendable
    @inlinable
    public func describeRestoreJob(_ input: DescribeRestoreJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRestoreJobOutput {
        try await self.client.execute(
            operation: "DescribeRestoreJob", 
            path: "/restore-jobs/{RestoreJobId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns metadata associated with a restore job that is specified by a job ID.
    ///
    /// Parameters:
    ///   - restoreJobId: Uniquely identifies the job that restores a recovery point.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRestoreJob(
        restoreJobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRestoreJobOutput {
        let input = DescribeRestoreJobInput(
            restoreJobId: restoreJobId
        )
        return try await self.describeRestoreJob(input, logger: logger)
    }

    /// Removes the association between an MPA approval team and a backup vault, disabling the MPA approval workflow for restore operations.
    @Sendable
    @inlinable
    public func disassociateBackupVaultMpaApprovalTeam(_ input: DisassociateBackupVaultMpaApprovalTeamInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DisassociateBackupVaultMpaApprovalTeam", 
            path: "/backup-vaults/{BackupVaultName}/mpaApprovalTeam?delete", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the association between an MPA approval team and a backup vault, disabling the MPA approval workflow for restore operations.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of the backup vault from which to disassociate the MPA approval team.
    ///   - requesterComment: An optional comment explaining the reason for disassociating the MPA approval team from the backup vault.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateBackupVaultMpaApprovalTeam(
        backupVaultName: String,
        requesterComment: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DisassociateBackupVaultMpaApprovalTeamInput(
            backupVaultName: backupVaultName, 
            requesterComment: requesterComment
        )
        return try await self.disassociateBackupVaultMpaApprovalTeam(input, logger: logger)
    }

    /// Deletes the specified continuous backup recovery point from Backup and releases control of that continuous backup to the source service, such as Amazon RDS. The source service will continue to create and retain continuous backups using the lifecycle that you specified in your original backup plan. Does not support snapshot backup recovery points.
    @Sendable
    @inlinable
    public func disassociateRecoveryPoint(_ input: DisassociateRecoveryPointInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DisassociateRecoveryPoint", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points/{RecoveryPointArn}/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified continuous backup recovery point from Backup and releases control of that continuous backup to the source service, such as Amazon RDS. The source service will continue to create and retain continuous backups using the lifecycle that you specified in your original backup plan. Does not support snapshot backup recovery points.
    ///
    /// Parameters:
    ///   - backupVaultName: The unique name of an Backup vault.
    ///   - recoveryPointArn: An Amazon Resource Name (ARN) that uniquely identifies an Backup recovery point.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateRecoveryPoint(
        backupVaultName: String,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DisassociateRecoveryPointInput(
            backupVaultName: backupVaultName, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.disassociateRecoveryPoint(input, logger: logger)
    }

    /// This action to a specific child (nested) recovery point removes the relationship  between the specified recovery point and its parent (composite) recovery point.
    @Sendable
    @inlinable
    public func disassociateRecoveryPointFromParent(_ input: DisassociateRecoveryPointFromParentInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DisassociateRecoveryPointFromParent", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points/{RecoveryPointArn}/parentAssociation", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This action to a specific child (nested) recovery point removes the relationship  between the specified recovery point and its parent (composite) recovery point.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where the child (nested) recovery point is stored. Backup vaults are identified by names that are unique to the account used  to create them and the Amazon Web Services Region where they are created.
    ///   - recoveryPointArn: The Amazon Resource Name (ARN) that uniquely identifies the child  (nested) recovery point; for example,  arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateRecoveryPointFromParent(
        backupVaultName: String,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DisassociateRecoveryPointFromParentInput(
            backupVaultName: backupVaultName, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.disassociateRecoveryPointFromParent(input, logger: logger)
    }

    /// Returns the backup plan that is specified by the plan ID as a backup template.
    @Sendable
    @inlinable
    public func exportBackupPlanTemplate(_ input: ExportBackupPlanTemplateInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ExportBackupPlanTemplateOutput {
        try await self.client.execute(
            operation: "ExportBackupPlanTemplate", 
            path: "/backup/plans/{BackupPlanId}/toTemplate", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the backup plan that is specified by the plan ID as a backup template.
    ///
    /// Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func exportBackupPlanTemplate(
        backupPlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ExportBackupPlanTemplateOutput {
        let input = ExportBackupPlanTemplateInput(
            backupPlanId: backupPlanId
        )
        return try await self.exportBackupPlanTemplate(input, logger: logger)
    }

    /// Returns BackupPlan details for the specified BackupPlanId. The details are the body of a backup plan in JSON format, in addition to plan metadata.
    @Sendable
    @inlinable
    public func getBackupPlan(_ input: GetBackupPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBackupPlanOutput {
        try await self.client.execute(
            operation: "GetBackupPlan", 
            path: "/backup/plans/{BackupPlanId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns BackupPlan details for the specified BackupPlanId. The details are the body of a backup plan in JSON format, in addition to plan metadata.
    ///
    /// Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - maxScheduledRunsPreview: Number of future scheduled backup runs to preview. When set to 0 (default), no scheduled runs preview is included in the response. Valid range is 0-10.
    ///   - versionId: Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. Version IDs cannot be edited.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBackupPlan(
        backupPlanId: String,
        maxScheduledRunsPreview: Int? = nil,
        versionId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBackupPlanOutput {
        let input = GetBackupPlanInput(
            backupPlanId: backupPlanId, 
            maxScheduledRunsPreview: maxScheduledRunsPreview, 
            versionId: versionId
        )
        return try await self.getBackupPlan(input, logger: logger)
    }

    /// Returns a valid JSON document specifying a backup plan or an error.
    @Sendable
    @inlinable
    public func getBackupPlanFromJSON(_ input: GetBackupPlanFromJSONInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBackupPlanFromJSONOutput {
        try await self.client.execute(
            operation: "GetBackupPlanFromJSON", 
            path: "/backup/template/json/toPlan", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a valid JSON document specifying a backup plan or an error.
    ///
    /// Parameters:
    ///   - backupPlanTemplateJson: A customer-supplied backup plan document in JSON format.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBackupPlanFromJSON(
        backupPlanTemplateJson: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBackupPlanFromJSONOutput {
        let input = GetBackupPlanFromJSONInput(
            backupPlanTemplateJson: backupPlanTemplateJson
        )
        return try await self.getBackupPlanFromJSON(input, logger: logger)
    }

    /// Returns the template specified by its templateId as a backup plan.
    @Sendable
    @inlinable
    public func getBackupPlanFromTemplate(_ input: GetBackupPlanFromTemplateInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBackupPlanFromTemplateOutput {
        try await self.client.execute(
            operation: "GetBackupPlanFromTemplate", 
            path: "/backup/template/plans/{BackupPlanTemplateId}/toPlan", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the template specified by its templateId as a backup plan.
    ///
    /// Parameters:
    ///   - backupPlanTemplateId: Uniquely identifies a stored backup plan template.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBackupPlanFromTemplate(
        backupPlanTemplateId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBackupPlanFromTemplateOutput {
        let input = GetBackupPlanFromTemplateInput(
            backupPlanTemplateId: backupPlanTemplateId
        )
        return try await self.getBackupPlanFromTemplate(input, logger: logger)
    }

    /// Returns selection metadata and a document in JSON format that specifies a list of resources that are associated with a backup plan.
    @Sendable
    @inlinable
    public func getBackupSelection(_ input: GetBackupSelectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBackupSelectionOutput {
        try await self.client.execute(
            operation: "GetBackupSelection", 
            path: "/backup/plans/{BackupPlanId}/selections/{SelectionId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns selection metadata and a document in JSON format that specifies a list of resources that are associated with a backup plan.
    ///
    /// Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - selectionId: Uniquely identifies the body of a request to assign a set of resources to a backup plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBackupSelection(
        backupPlanId: String,
        selectionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBackupSelectionOutput {
        let input = GetBackupSelectionInput(
            backupPlanId: backupPlanId, 
            selectionId: selectionId
        )
        return try await self.getBackupSelection(input, logger: logger)
    }

    /// Returns the access policy document that is associated with the named backup vault.
    @Sendable
    @inlinable
    public func getBackupVaultAccessPolicy(_ input: GetBackupVaultAccessPolicyInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBackupVaultAccessPolicyOutput {
        try await self.client.execute(
            operation: "GetBackupVaultAccessPolicy", 
            path: "/backup-vaults/{BackupVaultName}/access-policy", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the access policy document that is associated with the named backup vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBackupVaultAccessPolicy(
        backupVaultName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBackupVaultAccessPolicyOutput {
        let input = GetBackupVaultAccessPolicyInput(
            backupVaultName: backupVaultName
        )
        return try await self.getBackupVaultAccessPolicy(input, logger: logger)
    }

    /// Returns event notifications for the specified backup vault.
    @Sendable
    @inlinable
    public func getBackupVaultNotifications(_ input: GetBackupVaultNotificationsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBackupVaultNotificationsOutput {
        try await self.client.execute(
            operation: "GetBackupVaultNotifications", 
            path: "/backup-vaults/{BackupVaultName}/notification-configuration", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns event notifications for the specified backup vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBackupVaultNotifications(
        backupVaultName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBackupVaultNotificationsOutput {
        let input = GetBackupVaultNotificationsInput(
            backupVaultName: backupVaultName
        )
        return try await self.getBackupVaultNotifications(input, logger: logger)
    }

    /// This action returns details for a specified legal hold. The details are the  body of a legal hold in JSON format, in addition to metadata.
    @Sendable
    @inlinable
    public func getLegalHold(_ input: GetLegalHoldInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetLegalHoldOutput {
        try await self.client.execute(
            operation: "GetLegalHold", 
            path: "/legal-holds/{LegalHoldId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This action returns details for a specified legal hold. The details are the  body of a legal hold in JSON format, in addition to metadata.
    ///
    /// Parameters:
    ///   - legalHoldId: The ID of the legal hold.
    ///   - logger: Logger use during operation
    @inlinable
    public func getLegalHold(
        legalHoldId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetLegalHoldOutput {
        let input = GetLegalHoldInput(
            legalHoldId: legalHoldId
        )
        return try await self.getLegalHold(input, logger: logger)
    }

    /// This operation returns the metadata and details specific to  the backup index associated with the specified recovery point.
    @Sendable
    @inlinable
    public func getRecoveryPointIndexDetails(_ input: GetRecoveryPointIndexDetailsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRecoveryPointIndexDetailsOutput {
        try await self.client.execute(
            operation: "GetRecoveryPointIndexDetails", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points/{RecoveryPointArn}/index", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This operation returns the metadata and details specific to  the backup index associated with the specified recovery point.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. Accepted characters include lowercase letters, numbers, and hyphens.
    ///   - recoveryPointArn: An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRecoveryPointIndexDetails(
        backupVaultName: String,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRecoveryPointIndexDetailsOutput {
        let input = GetRecoveryPointIndexDetailsInput(
            backupVaultName: backupVaultName, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.getRecoveryPointIndexDetails(input, logger: logger)
    }

    /// Returns a set of metadata key-value pairs that were used to create the backup.
    @Sendable
    @inlinable
    public func getRecoveryPointRestoreMetadata(_ input: GetRecoveryPointRestoreMetadataInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRecoveryPointRestoreMetadataOutput {
        try await self.client.execute(
            operation: "GetRecoveryPointRestoreMetadata", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points/{RecoveryPointArn}/restore-metadata", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a set of metadata key-value pairs that were used to create the backup.
    ///
    /// Parameters:
    ///   - backupVaultAccountId: The account ID of the specified backup vault.
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - recoveryPointArn: An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRecoveryPointRestoreMetadata(
        backupVaultAccountId: String? = nil,
        backupVaultName: String,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRecoveryPointRestoreMetadataOutput {
        let input = GetRecoveryPointRestoreMetadataInput(
            backupVaultAccountId: backupVaultAccountId, 
            backupVaultName: backupVaultName, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.getRecoveryPointRestoreMetadata(input, logger: logger)
    }

    /// This request returns the metadata for the specified restore job.
    @Sendable
    @inlinable
    public func getRestoreJobMetadata(_ input: GetRestoreJobMetadataInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRestoreJobMetadataOutput {
        try await self.client.execute(
            operation: "GetRestoreJobMetadata", 
            path: "/restore-jobs/{RestoreJobId}/metadata", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request returns the metadata for the specified restore job.
    ///
    /// Parameters:
    ///   - restoreJobId: This is a unique identifier of a restore job within Backup.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRestoreJobMetadata(
        restoreJobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRestoreJobMetadataOutput {
        let input = GetRestoreJobMetadataInput(
            restoreJobId: restoreJobId
        )
        return try await self.getRestoreJobMetadata(input, logger: logger)
    }

    /// This request returns the minimal required set of metadata needed to  start a restore job with secure default settings. BackupVaultName  and RecoveryPointArn are required parameters.  BackupVaultAccountId is an optional parameter.
    @Sendable
    @inlinable
    public func getRestoreTestingInferredMetadata(_ input: GetRestoreTestingInferredMetadataInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRestoreTestingInferredMetadataOutput {
        try await self.client.execute(
            operation: "GetRestoreTestingInferredMetadata", 
            path: "/restore-testing/inferred-metadata", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request returns the minimal required set of metadata needed to  start a restore job with secure default settings. BackupVaultName  and RecoveryPointArn are required parameters.  BackupVaultAccountId is an optional parameter.
    ///
    /// Parameters:
    ///   - backupVaultAccountId: The account ID of the specified backup vault.
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup  vaults are identified by names that are unique to the account used to  create them and the Amazon Web ServicesRegion where they are created.  They consist of letters, numbers, and hyphens.
    ///   - recoveryPointArn: An Amazon Resource Name (ARN) that uniquely identifies a recovery  point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRestoreTestingInferredMetadata(
        backupVaultAccountId: String? = nil,
        backupVaultName: String,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRestoreTestingInferredMetadataOutput {
        let input = GetRestoreTestingInferredMetadataInput(
            backupVaultAccountId: backupVaultAccountId, 
            backupVaultName: backupVaultName, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.getRestoreTestingInferredMetadata(input, logger: logger)
    }

    /// Returns RestoreTestingPlan details for the specified RestoreTestingPlanName. The details are the body of a restore testing plan in JSON format, in addition to plan metadata.
    @Sendable
    @inlinable
    public func getRestoreTestingPlan(_ input: GetRestoreTestingPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRestoreTestingPlanOutput {
        try await self.client.execute(
            operation: "GetRestoreTestingPlan", 
            path: "/restore-testing/plans/{RestoreTestingPlanName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns RestoreTestingPlan details for the specified RestoreTestingPlanName. The details are the body of a restore testing plan in JSON format, in addition to plan metadata.
    ///
    /// Parameters:
    ///   - restoreTestingPlanName: Required unique name of the restore testing plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRestoreTestingPlan(
        restoreTestingPlanName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRestoreTestingPlanOutput {
        let input = GetRestoreTestingPlanInput(
            restoreTestingPlanName: restoreTestingPlanName
        )
        return try await self.getRestoreTestingPlan(input, logger: logger)
    }

    /// Returns RestoreTestingSelection, which displays resources  and elements of the restore testing plan.
    @Sendable
    @inlinable
    public func getRestoreTestingSelection(_ input: GetRestoreTestingSelectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRestoreTestingSelectionOutput {
        try await self.client.execute(
            operation: "GetRestoreTestingSelection", 
            path: "/restore-testing/plans/{RestoreTestingPlanName}/selections/{RestoreTestingSelectionName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns RestoreTestingSelection, which displays resources  and elements of the restore testing plan.
    ///
    /// Parameters:
    ///   - restoreTestingPlanName: Required unique name of the restore testing plan.
    ///   - restoreTestingSelectionName: Required unique name of the restore testing selection.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRestoreTestingSelection(
        restoreTestingPlanName: String,
        restoreTestingSelectionName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRestoreTestingSelectionOutput {
        let input = GetRestoreTestingSelectionInput(
            restoreTestingPlanName: restoreTestingPlanName, 
            restoreTestingSelectionName: restoreTestingSelectionName
        )
        return try await self.getRestoreTestingSelection(input, logger: logger)
    }

    /// Returns the Amazon Web Services resource types supported by Backup.
    @Sendable
    @inlinable
    public func getSupportedResourceTypes(logger: Logger = AWSClient.loggingDisabled) async throws -> GetSupportedResourceTypesOutput {
        try await self.client.execute(
            operation: "GetSupportedResourceTypes", 
            path: "/supported-resource-types", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// This is a request for a summary of backup jobs created  or running within the most recent 30 days. You can  include parameters AccountID, State, ResourceType, MessageCategory,  AggregationPeriod, MaxResults, or NextToken to filter  results. This request returns a summary that contains  Region, Account, State, ResourceType, MessageCategory,  StartTime, EndTime, and Count of included jobs.
    @Sendable
    @inlinable
    public func listBackupJobSummaries(_ input: ListBackupJobSummariesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBackupJobSummariesOutput {
        try await self.client.execute(
            operation: "ListBackupJobSummaries", 
            path: "/audit/backup-job-summaries", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This is a request for a summary of backup jobs created  or running within the most recent 30 days. You can  include parameters AccountID, State, ResourceType, MessageCategory,  AggregationPeriod, MaxResults, or NextToken to filter  results. This request returns a summary that contains  Region, Account, State, ResourceType, MessageCategory,  StartTime, EndTime, and Count of included jobs.
    ///
    /// Parameters:
    ///   - accountId: Returns the job count for the specified account. If the request is sent from a member account or an account  not part of Amazon Web Services Organizations, jobs within requestor's account  will be returned. Root, admin, and delegated administrator accounts can use  the value ANY to return job counts from every account in the  organization.  AGGREGATE_ALL aggregates job counts  from all accounts within the authenticated organization,  then returns the sum.
    ///   - aggregationPeriod: The period for the returned results.    ONE_DAY - The daily job count for the prior 14 days.    SEVEN_DAYS - The aggregated job count for the prior 7 days.    FOURTEEN_DAYS - The aggregated job count for prior 14 days.
    ///   - maxResults: The maximum number of items to be returned. The value is an integer. Range of accepted values is from  1 to 500.
    ///   - messageCategory: This parameter returns the job count for the specified  message category. Example accepted strings include AccessDenied,  Success, and InvalidParameters. See  Monitoring  for a list of accepted MessageCategory strings. The the value ANY returns count of all message categories.  AGGREGATE_ALL aggregates job counts  for all message categories and returns the sum.
    ///   - nextToken: The next item following a partial list of returned resources. For example, if a request is made to return MaxResults number of resources, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - resourceType: Returns the job count for the specified resource type.  Use request GetSupportedResourceTypes to obtain  strings for supported resource types. The the value ANY returns count of all resource types.  AGGREGATE_ALL aggregates job counts  for all resource types and returns the sum. The type of Amazon Web Services resource to be backed up; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
    ///   - state: This parameter returns the job count for jobs with the specified state. The the value ANY returns count of all states.  AGGREGATE_ALL aggregates job counts for all states and returns the sum.  Completed with issues is a status found only in the Backup console. For API, this status refers to jobs with a state of COMPLETED and a MessageCategory with a value other than SUCCESS; that is, the status is completed but comes with a status message. To obtain the job count for Completed with issues, run two GET requests, and subtract the second, smaller number: GET /audit/backup-job-summaries?AggregationPeriod=FOURTEEN_DAYS&State=COMPLETED GET /audit/backup-job-summaries?AggregationPeriod=FOURTEEN_DAYS&MessageCategory=SUCCESS&State=COMPLETED
    ///   - logger: Logger use during operation
    @inlinable
    public func listBackupJobSummaries(
        accountId: String? = nil,
        aggregationPeriod: AggregationPeriod? = nil,
        maxResults: Int? = nil,
        messageCategory: String? = nil,
        nextToken: String? = nil,
        resourceType: String? = nil,
        state: BackupJobStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBackupJobSummariesOutput {
        let input = ListBackupJobSummariesInput(
            accountId: accountId, 
            aggregationPeriod: aggregationPeriod, 
            maxResults: maxResults, 
            messageCategory: messageCategory, 
            nextToken: nextToken, 
            resourceType: resourceType, 
            state: state
        )
        return try await self.listBackupJobSummaries(input, logger: logger)
    }

    /// Returns a list of existing backup jobs for an authenticated account for the last 30 days. For a longer period of time, consider using these monitoring tools.
    @Sendable
    @inlinable
    public func listBackupJobs(_ input: ListBackupJobsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBackupJobsOutput {
        try await self.client.execute(
            operation: "ListBackupJobs", 
            path: "/backup-jobs", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of existing backup jobs for an authenticated account for the last 30 days. For a longer period of time, consider using these monitoring tools.
    ///
    /// Parameters:
    ///   - byAccountId: The account ID to list the jobs from. Returns only backup jobs associated with the specified account ID. If used from an Organizations management account, passing * returns all jobs across the organization.
    ///   - byBackupVaultName: Returns only backup jobs that will be stored in the specified backup vault. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - byCompleteAfter: Returns only backup jobs completed after a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCompleteBefore: Returns only backup jobs completed before a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCreatedAfter: Returns only backup jobs that were created after the specified date.
    ///   - byCreatedBefore: Returns only backup jobs that were created before the specified date.
    ///   - byMessageCategory: This is an optional parameter that can be used to  filter out jobs with a MessageCategory which matches the  value you input. Example strings may include AccessDenied,  SUCCESS, AGGREGATE_ALL, and  InvalidParameters. View Monitoring  The wildcard () returns count of all message categories.  AGGREGATE_ALL aggregates job counts  for all message categories and returns the sum.
    ///   - byParentJobId: This is a filter to list child (nested) jobs based on parent job ID.
    ///   - byResourceArn: Returns only backup jobs that match the specified resource Amazon Resource Name (ARN).
    ///   - byResourceType: Returns only backup jobs for the specified resources:    Aurora for Amazon Aurora    CloudFormation for CloudFormation    DocumentDB for Amazon DocumentDB (with MongoDB compatibility)    DynamoDB for Amazon DynamoDB    EBS for Amazon Elastic Block Store    EC2 for Amazon Elastic Compute Cloud    EFS for Amazon Elastic File System    FSx for Amazon FSx    Neptune for Amazon Neptune    RDS for Amazon Relational Database Service    Redshift for Amazon Redshift    S3 for Amazon Simple Storage Service (Amazon S3)    SAP HANA on Amazon EC2 for SAP HANA databases  on Amazon Elastic Compute Cloud instances    Storage Gateway for Storage Gateway    Timestream for Amazon Timestream    VirtualMachine for VMware virtual machines
    ///   - byState: Returns only backup jobs that are in the specified state.  Completed with issues is a status found only in the Backup console. For API, this status refers to jobs with a state of COMPLETED and a MessageCategory with a value other than SUCCESS; that is, the status is completed but comes with a status message. To obtain the job count for Completed with issues, run two GET requests, and subtract the second, smaller number: GET /backup-jobs/?state=COMPLETED GET /backup-jobs/?messageCategory=SUCCESS&state=COMPLETED
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is  made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBackupJobs(
        byAccountId: String? = nil,
        byBackupVaultName: String? = nil,
        byCompleteAfter: Date? = nil,
        byCompleteBefore: Date? = nil,
        byCreatedAfter: Date? = nil,
        byCreatedBefore: Date? = nil,
        byMessageCategory: String? = nil,
        byParentJobId: String? = nil,
        byResourceArn: String? = nil,
        byResourceType: String? = nil,
        byState: BackupJobState? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBackupJobsOutput {
        let input = ListBackupJobsInput(
            byAccountId: byAccountId, 
            byBackupVaultName: byBackupVaultName, 
            byCompleteAfter: byCompleteAfter, 
            byCompleteBefore: byCompleteBefore, 
            byCreatedAfter: byCreatedAfter, 
            byCreatedBefore: byCreatedBefore, 
            byMessageCategory: byMessageCategory, 
            byParentJobId: byParentJobId, 
            byResourceArn: byResourceArn, 
            byResourceType: byResourceType, 
            byState: byState, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listBackupJobs(input, logger: logger)
    }

    /// Lists the backup plan templates.
    @Sendable
    @inlinable
    public func listBackupPlanTemplates(_ input: ListBackupPlanTemplatesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBackupPlanTemplatesOutput {
        try await self.client.execute(
            operation: "ListBackupPlanTemplates", 
            path: "/backup/template/plans", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the backup plan templates.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBackupPlanTemplates(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBackupPlanTemplatesOutput {
        let input = ListBackupPlanTemplatesInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listBackupPlanTemplates(input, logger: logger)
    }

    /// Returns version metadata of your backup plans, including Amazon Resource Names (ARNs), backup plan IDs, creation and deletion dates, plan names, and version IDs.
    @Sendable
    @inlinable
    public func listBackupPlanVersions(_ input: ListBackupPlanVersionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBackupPlanVersionsOutput {
        try await self.client.execute(
            operation: "ListBackupPlanVersions", 
            path: "/backup/plans/{BackupPlanId}/versions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns version metadata of your backup plans, including Amazon Resource Names (ARNs), backup plan IDs, creation and deletion dates, plan names, and version IDs.
    ///
    /// Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBackupPlanVersions(
        backupPlanId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBackupPlanVersionsOutput {
        let input = ListBackupPlanVersionsInput(
            backupPlanId: backupPlanId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listBackupPlanVersions(input, logger: logger)
    }

    /// Lists the active backup plans for the account.
    @Sendable
    @inlinable
    public func listBackupPlans(_ input: ListBackupPlansInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBackupPlansOutput {
        try await self.client.execute(
            operation: "ListBackupPlans", 
            path: "/backup/plans", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the active backup plans for the account.
    ///
    /// Parameters:
    ///   - includeDeleted: A Boolean value with a default value of FALSE that returns deleted backup plans when set to TRUE.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBackupPlans(
        includeDeleted: Bool? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBackupPlansOutput {
        let input = ListBackupPlansInput(
            includeDeleted: includeDeleted, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listBackupPlans(input, logger: logger)
    }

    /// Returns an array containing metadata of the resources associated with the target backup plan.
    @Sendable
    @inlinable
    public func listBackupSelections(_ input: ListBackupSelectionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBackupSelectionsOutput {
        try await self.client.execute(
            operation: "ListBackupSelections", 
            path: "/backup/plans/{BackupPlanId}/selections", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns an array containing metadata of the resources associated with the target backup plan.
    ///
    /// Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBackupSelections(
        backupPlanId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBackupSelectionsOutput {
        let input = ListBackupSelectionsInput(
            backupPlanId: backupPlanId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listBackupSelections(input, logger: logger)
    }

    /// Returns a list of recovery point storage containers along with information about them.
    @Sendable
    @inlinable
    public func listBackupVaults(_ input: ListBackupVaultsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBackupVaultsOutput {
        try await self.client.execute(
            operation: "ListBackupVaults", 
            path: "/backup-vaults", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of recovery point storage containers along with information about them.
    ///
    /// Parameters:
    ///   - byShared: This parameter will sort the list of vaults by shared vaults.
    ///   - byVaultType: This parameter will sort the list of vaults by vault type.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listBackupVaults(
        byShared: Bool? = nil,
        byVaultType: VaultType? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBackupVaultsOutput {
        let input = ListBackupVaultsInput(
            byShared: byShared, 
            byVaultType: byVaultType, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listBackupVaults(input, logger: logger)
    }

    /// This request obtains a list of copy jobs created  or running within the the most recent 30 days. You can  include parameters AccountID, State, ResourceType, MessageCategory,  AggregationPeriod, MaxResults, or NextToken to filter  results. This request returns a summary that contains  Region, Account, State, RestourceType, MessageCategory,  StartTime, EndTime, and Count of included jobs.
    @Sendable
    @inlinable
    public func listCopyJobSummaries(_ input: ListCopyJobSummariesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCopyJobSummariesOutput {
        try await self.client.execute(
            operation: "ListCopyJobSummaries", 
            path: "/audit/copy-job-summaries", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request obtains a list of copy jobs created  or running within the the most recent 30 days. You can  include parameters AccountID, State, ResourceType, MessageCategory,  AggregationPeriod, MaxResults, or NextToken to filter  results. This request returns a summary that contains  Region, Account, State, RestourceType, MessageCategory,  StartTime, EndTime, and Count of included jobs.
    ///
    /// Parameters:
    ///   - accountId: Returns the job count for the specified account. If the request is sent from a member account or an account  not part of Amazon Web Services Organizations, jobs within requestor's account  will be returned. Root, admin, and delegated administrator accounts can use  the value ANY to return job counts from every account in the  organization.  AGGREGATE_ALL aggregates job counts  from all accounts within the authenticated organization,  then returns the sum.
    ///   - aggregationPeriod: The period for the returned results.    ONE_DAY - The daily job count for the prior 14 days.    SEVEN_DAYS - The aggregated job count for the prior 7 days.    FOURTEEN_DAYS - The aggregated job count for prior 14 days.
    ///   - maxResults: This parameter sets the maximum number of items  to be returned. The value is an integer. Range of accepted values is from  1 to 500.
    ///   - messageCategory: This parameter returns the job count for the specified  message category. Example accepted strings include AccessDenied,  Success, and InvalidParameters. See  Monitoring  for a list of accepted MessageCategory strings. The the value ANY returns count of all message categories.  AGGREGATE_ALL aggregates job counts  for all message categories and returns the sum.
    ///   - nextToken: The next item following a partial list of returned resources. For example, if a request is made to return MaxResults number of resources, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - resourceType: Returns the job count for the specified resource type.  Use request GetSupportedResourceTypes to obtain  strings for supported resource types. The the value ANY returns count of all resource types.  AGGREGATE_ALL aggregates job counts  for all resource types and returns the sum. The type of Amazon Web Services resource to be backed up; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
    ///   - state: This parameter returns the job count for jobs  with the specified state. The the value ANY returns count of all states.  AGGREGATE_ALL aggregates job counts  for all states and returns the sum.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCopyJobSummaries(
        accountId: String? = nil,
        aggregationPeriod: AggregationPeriod? = nil,
        maxResults: Int? = nil,
        messageCategory: String? = nil,
        nextToken: String? = nil,
        resourceType: String? = nil,
        state: CopyJobStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCopyJobSummariesOutput {
        let input = ListCopyJobSummariesInput(
            accountId: accountId, 
            aggregationPeriod: aggregationPeriod, 
            maxResults: maxResults, 
            messageCategory: messageCategory, 
            nextToken: nextToken, 
            resourceType: resourceType, 
            state: state
        )
        return try await self.listCopyJobSummaries(input, logger: logger)
    }

    /// Returns metadata about your copy jobs.
    @Sendable
    @inlinable
    public func listCopyJobs(_ input: ListCopyJobsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCopyJobsOutput {
        try await self.client.execute(
            operation: "ListCopyJobs", 
            path: "/copy-jobs", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns metadata about your copy jobs.
    ///
    /// Parameters:
    ///   - byAccountId: The account ID to list the jobs from. Returns only copy jobs associated with the specified account ID.
    ///   - byCompleteAfter: Returns only copy jobs completed after a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCompleteBefore: Returns only copy jobs completed before a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCreatedAfter: Returns only copy jobs that were created after the specified date.
    ///   - byCreatedBefore: Returns only copy jobs that were created before the specified date.
    ///   - byDestinationVaultArn: An Amazon Resource Name (ARN) that uniquely identifies a source backup vault to copy from; for example, arn:aws:backup:us-east-1:123456789012:backup-vault:aBackupVault.
    ///   - byMessageCategory: This is an optional parameter that can be used to  filter out jobs with a MessageCategory which matches the  value you input. Example strings may include AccessDenied,  SUCCESS, AGGREGATE_ALL, and  INVALIDPARAMETERS. View  Monitoring for a list of accepted strings. The the value ANY returns count of all message categories.  AGGREGATE_ALL aggregates job counts  for all message categories and returns the sum.
    ///   - byParentJobId: This is a filter to list child (nested) jobs based on parent job ID.
    ///   - byResourceArn: Returns only copy jobs that match the specified resource Amazon Resource Name (ARN).
    ///   - byResourceType: Returns only backup jobs for the specified resources:    Aurora for Amazon Aurora    CloudFormation for CloudFormation    DocumentDB for Amazon DocumentDB (with MongoDB compatibility)    DynamoDB for Amazon DynamoDB    EBS for Amazon Elastic Block Store    EC2 for Amazon Elastic Compute Cloud    EFS for Amazon Elastic File System    FSx for Amazon FSx    Neptune for Amazon Neptune    RDS for Amazon Relational Database Service    Redshift for Amazon Redshift    S3 for Amazon Simple Storage Service (Amazon S3)    SAP HANA on Amazon EC2 for SAP HANA databases  on Amazon Elastic Compute Cloud instances    Storage Gateway for Storage Gateway    Timestream for Amazon Timestream    VirtualMachine for VMware virtual machines
    ///   - byState: Returns only copy jobs that are in the specified state.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCopyJobs(
        byAccountId: String? = nil,
        byCompleteAfter: Date? = nil,
        byCompleteBefore: Date? = nil,
        byCreatedAfter: Date? = nil,
        byCreatedBefore: Date? = nil,
        byDestinationVaultArn: String? = nil,
        byMessageCategory: String? = nil,
        byParentJobId: String? = nil,
        byResourceArn: String? = nil,
        byResourceType: String? = nil,
        byState: CopyJobState? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCopyJobsOutput {
        let input = ListCopyJobsInput(
            byAccountId: byAccountId, 
            byCompleteAfter: byCompleteAfter, 
            byCompleteBefore: byCompleteBefore, 
            byCreatedAfter: byCreatedAfter, 
            byCreatedBefore: byCreatedBefore, 
            byDestinationVaultArn: byDestinationVaultArn, 
            byMessageCategory: byMessageCategory, 
            byParentJobId: byParentJobId, 
            byResourceArn: byResourceArn, 
            byResourceType: byResourceType, 
            byState: byState, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCopyJobs(input, logger: logger)
    }

    /// Returns a list of all frameworks for an Amazon Web Services account and Amazon Web Services Region.
    @Sendable
    @inlinable
    public func listFrameworks(_ input: ListFrameworksInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFrameworksOutput {
        try await self.client.execute(
            operation: "ListFrameworks", 
            path: "/audit/frameworks", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of all frameworks for an Amazon Web Services account and Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - maxResults: The number of desired results from 1 to 1000. Optional. If unspecified, the query will return 1 MB of data.
    ///   - nextToken: An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
    ///   - logger: Logger use during operation
    @inlinable
    public func listFrameworks(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFrameworksOutput {
        let input = ListFrameworksInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listFrameworks(input, logger: logger)
    }

    /// This operation returns a list of recovery points that have an  associated index, belonging to the specified account. Optional parameters you can include are: MaxResults;  NextToken; SourceResourceArns; CreatedBefore; CreatedAfter;  and ResourceType.
    @Sendable
    @inlinable
    public func listIndexedRecoveryPoints(_ input: ListIndexedRecoveryPointsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListIndexedRecoveryPointsOutput {
        try await self.client.execute(
            operation: "ListIndexedRecoveryPoints", 
            path: "/indexes/recovery-point", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This operation returns a list of recovery points that have an  associated index, belonging to the specified account. Optional parameters you can include are: MaxResults;  NextToken; SourceResourceArns; CreatedBefore; CreatedAfter;  and ResourceType.
    ///
    /// Parameters:
    ///   - createdAfter: Returns only indexed recovery points that were created after the  specified date.
    ///   - createdBefore: Returns only indexed recovery points that were created before the  specified date.
    ///   - indexStatus: Include this parameter to filter the returned list by  the indicated statuses. Accepted values: PENDING | ACTIVE | FAILED | DELETING  A recovery point with an index that has the status of ACTIVE  can be included in a search.
    ///   - maxResults: The maximum number of resource list items to be returned.
    ///   - nextToken: The next item following a partial list of returned recovery points. For example, if a request is made to return MaxResults number of indexed recovery points, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - resourceType: Returns a list of indexed recovery points for the specified  resource type(s). Accepted values include:    EBS for Amazon Elastic Block Store    S3 for Amazon Simple Storage Service (Amazon S3)
    ///   - sourceResourceArn: A string of the  Amazon Resource Name (ARN) that uniquely identifies  the source resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func listIndexedRecoveryPoints(
        createdAfter: Date? = nil,
        createdBefore: Date? = nil,
        indexStatus: IndexStatus? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceType: String? = nil,
        sourceResourceArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListIndexedRecoveryPointsOutput {
        let input = ListIndexedRecoveryPointsInput(
            createdAfter: createdAfter, 
            createdBefore: createdBefore, 
            indexStatus: indexStatus, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceType: resourceType, 
            sourceResourceArn: sourceResourceArn
        )
        return try await self.listIndexedRecoveryPoints(input, logger: logger)
    }

    /// This action returns metadata about active and previous legal holds.
    @Sendable
    @inlinable
    public func listLegalHolds(_ input: ListLegalHoldsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListLegalHoldsOutput {
        try await self.client.execute(
            operation: "ListLegalHolds", 
            path: "/legal-holds", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This action returns metadata about active and previous legal holds.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of resource list items to be returned.
    ///   - nextToken: The next item following a partial list of returned resources. For example, if a request is made to return MaxResults number of resources, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listLegalHolds(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListLegalHoldsOutput {
        let input = ListLegalHoldsInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listLegalHolds(input, logger: logger)
    }

    /// Returns an array of resources successfully backed up by Backup, including the time the resource was saved, an Amazon Resource Name (ARN) of the resource, and a resource type.
    @Sendable
    @inlinable
    public func listProtectedResources(_ input: ListProtectedResourcesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListProtectedResourcesOutput {
        try await self.client.execute(
            operation: "ListProtectedResources", 
            path: "/resources", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns an array of resources successfully backed up by Backup, including the time the resource was saved, an Amazon Resource Name (ARN) of the resource, and a resource type.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listProtectedResources(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListProtectedResourcesOutput {
        let input = ListProtectedResourcesInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listProtectedResources(input, logger: logger)
    }

    /// This request lists the protected resources corresponding to each backup vault.
    @Sendable
    @inlinable
    public func listProtectedResourcesByBackupVault(_ input: ListProtectedResourcesByBackupVaultInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListProtectedResourcesByBackupVaultOutput {
        try await self.client.execute(
            operation: "ListProtectedResourcesByBackupVault", 
            path: "/backup-vaults/{BackupVaultName}/resources", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request lists the protected resources corresponding to each backup vault.
    ///
    /// Parameters:
    ///   - backupVaultAccountId: The list of protected resources by backup vault within the vault(s) you specify by account ID.
    ///   - backupVaultName: The list of protected resources by backup vault within the vault(s) you specify by name.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listProtectedResourcesByBackupVault(
        backupVaultAccountId: String? = nil,
        backupVaultName: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListProtectedResourcesByBackupVaultOutput {
        let input = ListProtectedResourcesByBackupVaultInput(
            backupVaultAccountId: backupVaultAccountId, 
            backupVaultName: backupVaultName, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listProtectedResourcesByBackupVault(input, logger: logger)
    }

    /// Returns detailed information about the recovery points stored in a backup vault.
    @Sendable
    @inlinable
    public func listRecoveryPointsByBackupVault(_ input: ListRecoveryPointsByBackupVaultInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRecoveryPointsByBackupVaultOutput {
        try await self.client.execute(
            operation: "ListRecoveryPointsByBackupVault", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns detailed information about the recovery points stored in a backup vault.
    ///
    /// Parameters:
    ///   - backupVaultAccountId: This parameter will sort the list of recovery points by account ID.
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.  Backup vault name might not be available when a supported service creates the backup.
    ///   - byBackupPlanId: Returns only recovery points that match the specified backup plan ID.
    ///   - byCreatedAfter: Returns only recovery points that were created after the specified timestamp.
    ///   - byCreatedBefore: Returns only recovery points that were created before the specified timestamp.
    ///   - byParentRecoveryPointArn: This returns only recovery points that match the specified parent (composite) recovery point Amazon Resource Name (ARN).
    ///   - byResourceArn: Returns only recovery points that match the specified resource Amazon Resource Name (ARN).
    ///   - byResourceType: Returns only recovery points that match the specified resource type(s):    Aurora for Amazon Aurora    CloudFormation for CloudFormation    DocumentDB for Amazon DocumentDB (with MongoDB compatibility)    DynamoDB for Amazon DynamoDB    EBS for Amazon Elastic Block Store    EC2 for Amazon Elastic Compute Cloud    EFS for Amazon Elastic File System    FSx for Amazon FSx    Neptune for Amazon Neptune    RDS for Amazon Relational Database Service    Redshift for Amazon Redshift    S3 for Amazon Simple Storage Service (Amazon S3)    SAP HANA on Amazon EC2 for SAP HANA databases  on Amazon Elastic Compute Cloud instances    Storage Gateway for Storage Gateway    Timestream for Amazon Timestream    VirtualMachine for VMware virtual machines
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRecoveryPointsByBackupVault(
        backupVaultAccountId: String? = nil,
        backupVaultName: String,
        byBackupPlanId: String? = nil,
        byCreatedAfter: Date? = nil,
        byCreatedBefore: Date? = nil,
        byParentRecoveryPointArn: String? = nil,
        byResourceArn: String? = nil,
        byResourceType: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRecoveryPointsByBackupVaultOutput {
        let input = ListRecoveryPointsByBackupVaultInput(
            backupVaultAccountId: backupVaultAccountId, 
            backupVaultName: backupVaultName, 
            byBackupPlanId: byBackupPlanId, 
            byCreatedAfter: byCreatedAfter, 
            byCreatedBefore: byCreatedBefore, 
            byParentRecoveryPointArn: byParentRecoveryPointArn, 
            byResourceArn: byResourceArn, 
            byResourceType: byResourceType, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listRecoveryPointsByBackupVault(input, logger: logger)
    }

    /// This action returns recovery point ARNs (Amazon Resource Names) of the  specified legal hold.
    @Sendable
    @inlinable
    public func listRecoveryPointsByLegalHold(_ input: ListRecoveryPointsByLegalHoldInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRecoveryPointsByLegalHoldOutput {
        try await self.client.execute(
            operation: "ListRecoveryPointsByLegalHold", 
            path: "/legal-holds/{LegalHoldId}/recovery-points", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This action returns recovery point ARNs (Amazon Resource Names) of the  specified legal hold.
    ///
    /// Parameters:
    ///   - legalHoldId: The ID of the legal hold.
    ///   - maxResults: The maximum number of resource list items to be returned.
    ///   - nextToken: The next item following a partial list of returned resources. For example, if a request is made to return MaxResults number of resources, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRecoveryPointsByLegalHold(
        legalHoldId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRecoveryPointsByLegalHoldOutput {
        let input = ListRecoveryPointsByLegalHoldInput(
            legalHoldId: legalHoldId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listRecoveryPointsByLegalHold(input, logger: logger)
    }

    /// The information about the recovery points of the type specified by a resource Amazon Resource Name (ARN).  For Amazon EFS and Amazon EC2, this action only lists recovery points created by Backup.
    @Sendable
    @inlinable
    public func listRecoveryPointsByResource(_ input: ListRecoveryPointsByResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRecoveryPointsByResourceOutput {
        try await self.client.execute(
            operation: "ListRecoveryPointsByResource", 
            path: "/resources/{ResourceArn}/recovery-points", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// The information about the recovery points of the type specified by a resource Amazon Resource Name (ARN).  For Amazon EFS and Amazon EC2, this action only lists recovery points created by Backup.
    ///
    /// Parameters:
    ///   - managedByAWSBackupOnly: This attribute filters recovery points based on ownership. If this is  set to TRUE, the response will contain recovery points associated  with the selected resources that are managed by Backup. If this is set to FALSE, the response will contain all  recovery points associated with the selected resource. Type: Boolean
    ///   - maxResults: The maximum number of items to be returned.  Amazon RDS requires a value of at least 20.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - resourceArn: An ARN that uniquely identifies a resource. The format of the ARN depends on the resource type.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRecoveryPointsByResource(
        managedByAWSBackupOnly: Bool? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRecoveryPointsByResourceOutput {
        let input = ListRecoveryPointsByResourceInput(
            managedByAWSBackupOnly: managedByAWSBackupOnly, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceArn: resourceArn
        )
        return try await self.listRecoveryPointsByResource(input, logger: logger)
    }

    /// Returns details about your report jobs.
    @Sendable
    @inlinable
    public func listReportJobs(_ input: ListReportJobsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListReportJobsOutput {
        try await self.client.execute(
            operation: "ListReportJobs", 
            path: "/audit/report-jobs", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns details about your report jobs.
    ///
    /// Parameters:
    ///   - byCreationAfter: Returns only report jobs that were created after the date and time specified in Unix format and Coordinated Universal Time (UTC). For example, the value 1516925490 represents Friday, January 26, 2018 12:11:30 AM.
    ///   - byCreationBefore: Returns only report jobs that were created before the date and time specified in Unix format and Coordinated Universal Time (UTC). For example, the value 1516925490 represents Friday, January 26, 2018 12:11:30 AM.
    ///   - byReportPlanName: Returns only report jobs with the specified report plan name.
    ///   - byStatus: Returns only report jobs that are in the specified status. The statuses are:  CREATED | RUNNING | COMPLETED | FAILED
    ///   - maxResults: The number of desired results from 1 to 1000. Optional. If unspecified, the query will return 1 MB of data.
    ///   - nextToken: An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
    ///   - logger: Logger use during operation
    @inlinable
    public func listReportJobs(
        byCreationAfter: Date? = nil,
        byCreationBefore: Date? = nil,
        byReportPlanName: String? = nil,
        byStatus: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListReportJobsOutput {
        let input = ListReportJobsInput(
            byCreationAfter: byCreationAfter, 
            byCreationBefore: byCreationBefore, 
            byReportPlanName: byReportPlanName, 
            byStatus: byStatus, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listReportJobs(input, logger: logger)
    }

    /// Returns a list of your report plans. For detailed information about a single report plan, use DescribeReportPlan.
    @Sendable
    @inlinable
    public func listReportPlans(_ input: ListReportPlansInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListReportPlansOutput {
        try await self.client.execute(
            operation: "ListReportPlans", 
            path: "/audit/report-plans", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of your report plans. For detailed information about a single report plan, use DescribeReportPlan.
    ///
    /// Parameters:
    ///   - maxResults: The number of desired results from 1 to 1000. Optional. If unspecified, the query will return 1 MB of data.
    ///   - nextToken: An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
    ///   - logger: Logger use during operation
    @inlinable
    public func listReportPlans(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListReportPlansOutput {
        let input = ListReportPlansInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listReportPlans(input, logger: logger)
    }

    /// Returns a list of restore access backup vaults associated with a specified backup vault.
    @Sendable
    @inlinable
    public func listRestoreAccessBackupVaults(_ input: ListRestoreAccessBackupVaultsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRestoreAccessBackupVaultsOutput {
        try await self.client.execute(
            operation: "ListRestoreAccessBackupVaults", 
            path: "/logically-air-gapped-backup-vaults/{BackupVaultName}/restore-access-backup-vaults", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of restore access backup vaults associated with a specified backup vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of the backup vault for which to list associated restore access backup vaults.
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - nextToken: The pagination token from a previous request to retrieve the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRestoreAccessBackupVaults(
        backupVaultName: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRestoreAccessBackupVaultsOutput {
        let input = ListRestoreAccessBackupVaultsInput(
            backupVaultName: backupVaultName, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listRestoreAccessBackupVaults(input, logger: logger)
    }

    /// This request obtains a summary of restore jobs created  or running within the the most recent 30 days. You can  include parameters AccountID, State, ResourceType,   AggregationPeriod, MaxResults, or NextToken to filter  results. This request returns a summary that contains  Region, Account, State, RestourceType, MessageCategory,  StartTime, EndTime, and Count of included jobs.
    @Sendable
    @inlinable
    public func listRestoreJobSummaries(_ input: ListRestoreJobSummariesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRestoreJobSummariesOutput {
        try await self.client.execute(
            operation: "ListRestoreJobSummaries", 
            path: "/audit/restore-job-summaries", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request obtains a summary of restore jobs created  or running within the the most recent 30 days. You can  include parameters AccountID, State, ResourceType,   AggregationPeriod, MaxResults, or NextToken to filter  results. This request returns a summary that contains  Region, Account, State, RestourceType, MessageCategory,  StartTime, EndTime, and Count of included jobs.
    ///
    /// Parameters:
    ///   - accountId: Returns the job count for the specified account. If the request is sent from a member account or an account  not part of Amazon Web Services Organizations, jobs within requestor's account  will be returned. Root, admin, and delegated administrator accounts can use  the value ANY to return job counts from every account in the  organization.  AGGREGATE_ALL aggregates job counts  from all accounts within the authenticated organization,  then returns the sum.
    ///   - aggregationPeriod: The period for the returned results.    ONE_DAY - The daily job count for the prior 14 days.    SEVEN_DAYS - The aggregated job count for the prior 7 days.    FOURTEEN_DAYS - The aggregated job count for prior 14 days.
    ///   - maxResults: This parameter sets the maximum number of items  to be returned. The value is an integer. Range of accepted values is from  1 to 500.
    ///   - nextToken: The next item following a partial list of returned resources. For example, if a request is made to return MaxResults number of resources, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - resourceType: Returns the job count for the specified resource type.  Use request GetSupportedResourceTypes to obtain  strings for supported resource types. The the value ANY returns count of all resource types.  AGGREGATE_ALL aggregates job counts  for all resource types and returns the sum. The type of Amazon Web Services resource to be backed up; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
    ///   - state: This parameter returns the job count for jobs  with the specified state. The the value ANY returns count of all states.  AGGREGATE_ALL aggregates job counts  for all states and returns the sum.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRestoreJobSummaries(
        accountId: String? = nil,
        aggregationPeriod: AggregationPeriod? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceType: String? = nil,
        state: RestoreJobState? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRestoreJobSummariesOutput {
        let input = ListRestoreJobSummariesInput(
            accountId: accountId, 
            aggregationPeriod: aggregationPeriod, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceType: resourceType, 
            state: state
        )
        return try await self.listRestoreJobSummaries(input, logger: logger)
    }

    /// Returns a list of jobs that Backup initiated to restore a saved resource, including details about the recovery process.
    @Sendable
    @inlinable
    public func listRestoreJobs(_ input: ListRestoreJobsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRestoreJobsOutput {
        try await self.client.execute(
            operation: "ListRestoreJobs", 
            path: "/restore-jobs", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of jobs that Backup initiated to restore a saved resource, including details about the recovery process.
    ///
    /// Parameters:
    ///   - byAccountId: The account ID to list the jobs from. Returns only restore jobs associated with the specified account ID.
    ///   - byCompleteAfter: Returns only copy jobs completed after a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCompleteBefore: Returns only copy jobs completed before a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCreatedAfter: Returns only restore jobs that were created after the specified date.
    ///   - byCreatedBefore: Returns only restore jobs that were created before the specified date.
    ///   - byResourceType: Include this parameter to return only restore jobs for the specified resources:    Aurora for Amazon Aurora    CloudFormation for CloudFormation    DocumentDB for Amazon DocumentDB (with MongoDB compatibility)    DynamoDB for Amazon DynamoDB    EBS for Amazon Elastic Block Store    EC2 for Amazon Elastic Compute Cloud    EFS for Amazon Elastic File System    FSx for Amazon FSx    Neptune for Amazon Neptune    RDS for Amazon Relational Database Service    Redshift for Amazon Redshift    S3 for Amazon Simple Storage Service (Amazon S3)    SAP HANA on Amazon EC2 for SAP HANA databases  on Amazon Elastic Compute Cloud instances    Storage Gateway for Storage Gateway    Timestream for Amazon Timestream    VirtualMachine for VMware virtual machines
    ///   - byRestoreTestingPlanArn: This returns only restore testing jobs that match the  specified resource Amazon Resource Name (ARN).
    ///   - byStatus: Returns only restore jobs associated with the specified job status.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRestoreJobs(
        byAccountId: String? = nil,
        byCompleteAfter: Date? = nil,
        byCompleteBefore: Date? = nil,
        byCreatedAfter: Date? = nil,
        byCreatedBefore: Date? = nil,
        byResourceType: String? = nil,
        byRestoreTestingPlanArn: String? = nil,
        byStatus: RestoreJobStatus? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRestoreJobsOutput {
        let input = ListRestoreJobsInput(
            byAccountId: byAccountId, 
            byCompleteAfter: byCompleteAfter, 
            byCompleteBefore: byCompleteBefore, 
            byCreatedAfter: byCreatedAfter, 
            byCreatedBefore: byCreatedBefore, 
            byResourceType: byResourceType, 
            byRestoreTestingPlanArn: byRestoreTestingPlanArn, 
            byStatus: byStatus, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listRestoreJobs(input, logger: logger)
    }

    /// This returns restore jobs that contain the specified protected resource. You must include ResourceArn. You can optionally include NextToken, ByStatus, MaxResults, ByRecoveryPointCreationDateAfter , and ByRecoveryPointCreationDateBefore.
    @Sendable
    @inlinable
    public func listRestoreJobsByProtectedResource(_ input: ListRestoreJobsByProtectedResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRestoreJobsByProtectedResourceOutput {
        try await self.client.execute(
            operation: "ListRestoreJobsByProtectedResource", 
            path: "/resources/{ResourceArn}/restore-jobs", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This returns restore jobs that contain the specified protected resource. You must include ResourceArn. You can optionally include NextToken, ByStatus, MaxResults, ByRecoveryPointCreationDateAfter , and ByRecoveryPointCreationDateBefore.
    ///
    /// Parameters:
    ///   - byRecoveryPointCreationDateAfter: Returns only restore jobs of recovery points that were created after the specified date.
    ///   - byRecoveryPointCreationDateBefore: Returns only restore jobs of recovery points that were created before the specified date.
    ///   - byStatus: Returns only restore jobs associated with the specified job status.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example,  if a request ismade to return MaxResults number of items,  NextToken allows you to return more items in your list  starting at the location pointed to by the next token.
    ///   - resourceArn: Returns only restore jobs that match the specified resource  Amazon Resource Name (ARN).
    ///   - logger: Logger use during operation
    @inlinable
    public func listRestoreJobsByProtectedResource(
        byRecoveryPointCreationDateAfter: Date? = nil,
        byRecoveryPointCreationDateBefore: Date? = nil,
        byStatus: RestoreJobStatus? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRestoreJobsByProtectedResourceOutput {
        let input = ListRestoreJobsByProtectedResourceInput(
            byRecoveryPointCreationDateAfter: byRecoveryPointCreationDateAfter, 
            byRecoveryPointCreationDateBefore: byRecoveryPointCreationDateBefore, 
            byStatus: byStatus, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceArn: resourceArn
        )
        return try await self.listRestoreJobsByProtectedResource(input, logger: logger)
    }

    /// Returns a list of restore testing plans.
    @Sendable
    @inlinable
    public func listRestoreTestingPlans(_ input: ListRestoreTestingPlansInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRestoreTestingPlansOutput {
        try await self.client.execute(
            operation: "ListRestoreTestingPlans", 
            path: "/restore-testing/plans", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of restore testing plans.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items.  For example, if a request is made to return MaxResults  number of items, NextToken allows you to return more items  in your list starting at the location pointed to by the nexttoken.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRestoreTestingPlans(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRestoreTestingPlansOutput {
        let input = ListRestoreTestingPlansInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listRestoreTestingPlans(input, logger: logger)
    }

    /// Returns a list of restore testing selections. Can be filtered  by MaxResults and RestoreTestingPlanName.
    @Sendable
    @inlinable
    public func listRestoreTestingSelections(_ input: ListRestoreTestingSelectionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRestoreTestingSelectionsOutput {
        try await self.client.execute(
            operation: "ListRestoreTestingSelections", 
            path: "/restore-testing/plans/{RestoreTestingPlanName}/selections", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of restore testing selections. Can be filtered  by MaxResults and RestoreTestingPlanName.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items.  For example, if a request is made to return MaxResults  number of items, NextToken allows you to return more items  in your list starting at the location pointed to by the nexttoken.
    ///   - restoreTestingPlanName: Returns restore testing selections by the specified restore testing  plan name.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRestoreTestingSelections(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        restoreTestingPlanName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRestoreTestingSelectionsOutput {
        let input = ListRestoreTestingSelectionsInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            restoreTestingPlanName: restoreTestingPlanName
        )
        return try await self.listRestoreTestingSelections(input, logger: logger)
    }

    /// Returns the tags assigned to the resource, such as a target recovery point, backup plan, or backup vault. This operation returns results depending on the resource type used in the value for resourceArn. For example, recovery points of Amazon DynamoDB with Advanced Settings have an ARN (Amazon Resource Name) that begins with arn:aws:backup. Recovery points (backups) of DynamoDB without Advanced Settings enabled have an ARN that begins with arn:aws:dynamodb. When this operation is called and when you include values of resourceArn that have an ARN other than arn:aws:backup, it may return one of the exceptions listed below. To prevent this exception, include only values representing resource types that are fully managed by Backup. These have an ARN that begins arn:aws:backup and they are noted in the Feature availability by resource table.
    @Sendable
    @inlinable
    public func listTags(_ input: ListTagsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsOutput {
        try await self.client.execute(
            operation: "ListTags", 
            path: "/tags/{ResourceArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the tags assigned to the resource, such as a target recovery point, backup plan, or backup vault. This operation returns results depending on the resource type used in the value for resourceArn. For example, recovery points of Amazon DynamoDB with Advanced Settings have an ARN (Amazon Resource Name) that begins with arn:aws:backup. Recovery points (backups) of DynamoDB without Advanced Settings enabled have an ARN that begins with arn:aws:dynamodb. When this operation is called and when you include values of resourceArn that have an ARN other than arn:aws:backup, it may return one of the exceptions listed below. To prevent this exception, include only values representing resource types that are fully managed by Backup. These have an ARN that begins arn:aws:backup and they are noted in the Feature availability by resource table.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to be returned.
    ///   - nextToken: The next item following a partial list of returned items. For example, if a request is made to return MaxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
    ///   - resourceArn: An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the type of resource. Valid targets for ListTags are recovery points, backup plans, and backup vaults.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTags(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsOutput {
        let input = ListTagsInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceArn: resourceArn
        )
        return try await self.listTags(input, logger: logger)
    }

    /// Sets a resource-based policy that is used to manage access permissions on the target backup vault. Requires a backup vault name and an access policy document in JSON format.
    @Sendable
    @inlinable
    public func putBackupVaultAccessPolicy(_ input: PutBackupVaultAccessPolicyInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutBackupVaultAccessPolicy", 
            path: "/backup-vaults/{BackupVaultName}/access-policy", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sets a resource-based policy that is used to manage access permissions on the target backup vault. Requires a backup vault name and an access policy document in JSON format.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - policy: The backup vault access policy document in JSON format.
    ///   - logger: Logger use during operation
    @inlinable
    public func putBackupVaultAccessPolicy(
        backupVaultName: String,
        policy: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutBackupVaultAccessPolicyInput(
            backupVaultName: backupVaultName, 
            policy: policy
        )
        return try await self.putBackupVaultAccessPolicy(input, logger: logger)
    }

    /// Applies Backup Vault Lock to a backup vault, preventing attempts to delete any recovery point stored in or created in a backup vault. Vault Lock also prevents attempts to update the lifecycle policy that controls the retention period of any recovery point currently stored in a backup vault. If specified, Vault Lock enforces a minimum and maximum retention period for future backup and copy jobs that target a backup vault.  Backup Vault Lock has been assessed by Cohasset Associates for use in environments  that are subject to SEC 17a-4, CFTC, and FINRA regulations. For more information about  how Backup Vault Lock relates to these regulations, see the  Cohasset Associates  Compliance Assessment.   For more information, see Backup Vault Lock.
    @Sendable
    @inlinable
    public func putBackupVaultLockConfiguration(_ input: PutBackupVaultLockConfigurationInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutBackupVaultLockConfiguration", 
            path: "/backup-vaults/{BackupVaultName}/vault-lock", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Applies Backup Vault Lock to a backup vault, preventing attempts to delete any recovery point stored in or created in a backup vault. Vault Lock also prevents attempts to update the lifecycle policy that controls the retention period of any recovery point currently stored in a backup vault. If specified, Vault Lock enforces a minimum and maximum retention period for future backup and copy jobs that target a backup vault.  Backup Vault Lock has been assessed by Cohasset Associates for use in environments  that are subject to SEC 17a-4, CFTC, and FINRA regulations. For more information about  how Backup Vault Lock relates to these regulations, see the  Cohasset Associates  Compliance Assessment.   For more information, see Backup Vault Lock.
    ///
    /// Parameters:
    ///   - backupVaultName: The Backup Vault Lock configuration that specifies the name of the backup vault it protects.
    ///   - changeableForDays: The Backup Vault Lock configuration that specifies the number of days before the lock date. For example, setting ChangeableForDays to 30 on Jan. 1, 2022 at 8pm UTC will set the lock date to Jan. 31, 2022 at 8pm UTC. Backup enforces a 72-hour cooling-off period before Vault Lock takes effect and becomes immutable. Therefore, you must set ChangeableForDays to 3 or greater. Before the lock date, you can delete Vault Lock from the vault using DeleteBackupVaultLockConfiguration or change the Vault Lock configuration using PutBackupVaultLockConfiguration. On and after the lock date, the Vault Lock becomes immutable and cannot be changed or deleted. If this parameter is not specified, you can delete Vault Lock from the vault using DeleteBackupVaultLockConfiguration or change the Vault Lock configuration using PutBackupVaultLockConfiguration at any time.
    ///   - maxRetentionDays: The Backup Vault Lock configuration that specifies the maximum retention period that the vault retains its recovery points. This setting can be useful if, for example, your organization's policies require you to destroy certain data after retaining it for four years (1460 days). If this parameter is not included, Vault Lock does not enforce a maximum retention period on the recovery points in the vault. If this parameter is included without a value, Vault Lock will not enforce a maximum retention period. If this parameter is specified, any backup or copy job to the vault must have a lifecycle policy with a retention period equal to or shorter than the maximum retention period. If the job's retention period is longer than that maximum retention period, then the vault fails the backup or copy job, and you should either modify your lifecycle settings or use a different vault. The longest maximum retention period you can specify is 36500 days (approximately 100 years). Recovery points already saved in the vault prior to Vault Lock are not affected.
    ///   - minRetentionDays: The Backup Vault Lock configuration that specifies the minimum retention period that the vault retains its recovery points. This setting can be useful if, for example, your organization's policies require you to retain certain data for at least seven years (2555 days). This parameter is required when a vault lock is created through CloudFormation; otherwise, this parameter is optional. If this parameter is not specified, Vault Lock will not enforce a minimum retention period. If this parameter is specified, any backup or copy job to the vault must have a lifecycle policy with a retention period equal to or longer than the minimum retention period. If the job's retention period is shorter than that minimum retention period, then the vault fails that backup or copy job, and you should either modify your lifecycle settings or use a different vault. The shortest minimum retention period you can specify is 1 day. Recovery points already saved in the vault prior to Vault Lock are not affected.
    ///   - logger: Logger use during operation
    @inlinable
    public func putBackupVaultLockConfiguration(
        backupVaultName: String,
        changeableForDays: Int64? = nil,
        maxRetentionDays: Int64? = nil,
        minRetentionDays: Int64? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutBackupVaultLockConfigurationInput(
            backupVaultName: backupVaultName, 
            changeableForDays: changeableForDays, 
            maxRetentionDays: maxRetentionDays, 
            minRetentionDays: minRetentionDays
        )
        return try await self.putBackupVaultLockConfiguration(input, logger: logger)
    }

    /// Turns on notifications on a backup vault for the specified topic and events.
    @Sendable
    @inlinable
    public func putBackupVaultNotifications(_ input: PutBackupVaultNotificationsInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutBackupVaultNotifications", 
            path: "/backup-vaults/{BackupVaultName}/notification-configuration", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Turns on notifications on a backup vault for the specified topic and events.
    ///
    /// Parameters:
    ///   - backupVaultEvents: An array of events that indicate the status of jobs to back up resources to the backup vault. For the list of supported events, common use cases, and code samples, see Notification options with Backup.
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - snsTopicArn: The Amazon Resource Name (ARN) that specifies the topic for a backup vault’s events; for example, arn:aws:sns:us-west-2:111122223333:MyVaultTopic.
    ///   - logger: Logger use during operation
    @inlinable
    public func putBackupVaultNotifications(
        backupVaultEvents: [BackupVaultEvent],
        backupVaultName: String,
        snsTopicArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutBackupVaultNotificationsInput(
            backupVaultEvents: backupVaultEvents, 
            backupVaultName: backupVaultName, 
            snsTopicArn: snsTopicArn
        )
        return try await self.putBackupVaultNotifications(input, logger: logger)
    }

    /// This request allows you to send your independent self-run  restore test validation results.  RestoreJobId and ValidationStatus  are required. Optionally, you can input a  ValidationStatusMessage.
    @Sendable
    @inlinable
    public func putRestoreValidationResult(_ input: PutRestoreValidationResultInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutRestoreValidationResult", 
            path: "/restore-jobs/{RestoreJobId}/validations", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request allows you to send your independent self-run  restore test validation results.  RestoreJobId and ValidationStatus  are required. Optionally, you can input a  ValidationStatusMessage.
    ///
    /// Parameters:
    ///   - restoreJobId: This is a unique identifier of a restore job within Backup.
    ///   - validationStatus: The status of your restore validation.
    ///   - validationStatusMessage: This is an optional message string you can input to  describe the validation status for the restore test validation.
    ///   - logger: Logger use during operation
    @inlinable
    public func putRestoreValidationResult(
        restoreJobId: String,
        validationStatus: RestoreValidationStatus,
        validationStatusMessage: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutRestoreValidationResultInput(
            restoreJobId: restoreJobId, 
            validationStatus: validationStatus, 
            validationStatusMessage: validationStatusMessage
        )
        return try await self.putRestoreValidationResult(input, logger: logger)
    }

    /// Revokes access to a restore access backup vault, removing the ability to restore from its recovery points and permanently deleting the vault.
    @Sendable
    @inlinable
    public func revokeRestoreAccessBackupVault(_ input: RevokeRestoreAccessBackupVaultInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RevokeRestoreAccessBackupVault", 
            path: "/logically-air-gapped-backup-vaults/{BackupVaultName}/restore-access-backup-vaults/{RestoreAccessBackupVaultArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Revokes access to a restore access backup vault, removing the ability to restore from its recovery points and permanently deleting the vault.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of the source backup vault associated with the restore access backup vault to be revoked.
    ///   - requesterComment: A comment explaining the reason for revoking access to the restore access backup vault.
    ///   - restoreAccessBackupVaultArn: The ARN of the restore access backup vault to revoke.
    ///   - logger: Logger use during operation
    @inlinable
    public func revokeRestoreAccessBackupVault(
        backupVaultName: String,
        requesterComment: String? = nil,
        restoreAccessBackupVaultArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RevokeRestoreAccessBackupVaultInput(
            backupVaultName: backupVaultName, 
            requesterComment: requesterComment, 
            restoreAccessBackupVaultArn: restoreAccessBackupVaultArn
        )
        return try await self.revokeRestoreAccessBackupVault(input, logger: logger)
    }

    /// Starts an on-demand backup job for the specified resource.
    @Sendable
    @inlinable
    public func startBackupJob(_ input: StartBackupJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> StartBackupJobOutput {
        try await self.client.execute(
            operation: "StartBackupJob", 
            path: "/backup-jobs", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an on-demand backup job for the specified resource.
    ///
    /// Parameters:
    ///   - backupOptions: The backup option for a selected resource. This option is only available for Windows Volume Shadow Copy Service (VSS) backup jobs. Valid values: Set to "WindowsVSS":"enabled" to enable the WindowsVSS backup option and create a Windows VSS backup. Set to "WindowsVSS""disabled" to create a regular backup. The WindowsVSS option is not enabled by default.
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - completeWindowMinutes: A value in minutes during which a successfully started backup must complete, or else Backup will cancel the job. This value is optional. This value begins counting down from when the backup was scheduled. It does not add additional time for StartWindowMinutes, or if the backup started later than scheduled. Like StartWindowMinutes, this parameter has a maximum value of  100 years (52,560,000 minutes).
    ///   - iamRoleArn: Specifies the IAM role ARN used to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
    ///   - idempotencyToken: A customer-chosen string that you can use to distinguish between otherwise identical calls to StartBackupJob. Retrying a successful request with the same idempotency token results in a success message with no action taken.
    ///   - index: Include this parameter to enable index creation if your backup  job has a resource type that supports backup indexes. Resource types that support backup indexes include:    EBS for Amazon Elastic Block Store    S3 for Amazon Simple Storage Service (Amazon S3)   Index can have 1 of 2 possible values, either ENABLED or  DISABLED. To create a backup index for an eligible ACTIVE recovery point  that does not yet have a backup index, set value to ENABLED. To delete a backup index, set value to DISABLED.
    ///   - lifecycle: The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. Backup will transition and expire backups automatically according to the lifecycle that you define.  Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “retention” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold.  Resource types that can transition to cold storage are listed in the Feature  availability by resource table. Backup ignores this expression for other resource types. This parameter has a maximum value of 100 years (36,500 days).
    ///   - recoveryPointTags: The tags to assign to the resources.
    ///   - resourceArn: An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the resource type.
    ///   - startWindowMinutes: A value in minutes after a backup is scheduled before a job will be canceled if it doesn't start successfully. This value is optional, and the default is 8 hours.  If this value is included, it must be at least 60 minutes to avoid errors. This parameter has a maximum value of 100 years (52,560,000 minutes). During the start window, the backup job status remains in CREATED status until it  has successfully begun or until the start window time has run out. If within the start  window time Backup receives an error that allows the job to be retried,  Backup will automatically retry to begin the job at least every 10 minutes  until the backup  successfully begins (the job status changes to RUNNING) or until the job status  changes to EXPIRED (which is expected to occur when the start window time is over).
    ///   - logger: Logger use during operation
    @inlinable
    public func startBackupJob(
        backupOptions: [String: String]? = nil,
        backupVaultName: String,
        completeWindowMinutes: Int64? = nil,
        iamRoleArn: String,
        idempotencyToken: String? = StartBackupJobInput.idempotencyToken(),
        index: Index? = nil,
        lifecycle: Lifecycle? = nil,
        recoveryPointTags: [String: String]? = nil,
        resourceArn: String,
        startWindowMinutes: Int64? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartBackupJobOutput {
        let input = StartBackupJobInput(
            backupOptions: backupOptions, 
            backupVaultName: backupVaultName, 
            completeWindowMinutes: completeWindowMinutes, 
            iamRoleArn: iamRoleArn, 
            idempotencyToken: idempotencyToken, 
            index: index, 
            lifecycle: lifecycle, 
            recoveryPointTags: recoveryPointTags, 
            resourceArn: resourceArn, 
            startWindowMinutes: startWindowMinutes
        )
        return try await self.startBackupJob(input, logger: logger)
    }

    /// Starts a job to create a one-time copy of the specified resource. Does not support continuous backups. See Copy  job retry for information on how Backup retries copy job  operations.
    @Sendable
    @inlinable
    public func startCopyJob(_ input: StartCopyJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> StartCopyJobOutput {
        try await self.client.execute(
            operation: "StartCopyJob", 
            path: "/copy-jobs", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts a job to create a one-time copy of the specified resource. Does not support continuous backups. See Copy  job retry for information on how Backup retries copy job  operations.
    ///
    /// Parameters:
    ///   - destinationBackupVaultArn: An Amazon Resource Name (ARN) that uniquely identifies a destination backup vault to copy to; for example, arn:aws:backup:us-east-1:123456789012:backup-vault:aBackupVault.
    ///   - iamRoleArn: Specifies the IAM role ARN used to copy the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
    ///   - idempotencyToken: A customer-chosen string that you can use to distinguish between otherwise identical calls to StartCopyJob. Retrying a successful request with the same idempotency token results in a success message with no action taken.
    ///   - lifecycle: 
    ///   - recoveryPointArn: An ARN that uniquely identifies a recovery point to use for the copy job; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - sourceBackupVaultName: The name of a logical source container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - logger: Logger use during operation
    @inlinable
    public func startCopyJob(
        destinationBackupVaultArn: String,
        iamRoleArn: String,
        idempotencyToken: String? = StartCopyJobInput.idempotencyToken(),
        lifecycle: Lifecycle? = nil,
        recoveryPointArn: String,
        sourceBackupVaultName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartCopyJobOutput {
        let input = StartCopyJobInput(
            destinationBackupVaultArn: destinationBackupVaultArn, 
            iamRoleArn: iamRoleArn, 
            idempotencyToken: idempotencyToken, 
            lifecycle: lifecycle, 
            recoveryPointArn: recoveryPointArn, 
            sourceBackupVaultName: sourceBackupVaultName
        )
        return try await self.startCopyJob(input, logger: logger)
    }

    /// Starts an on-demand report job for the specified report plan.
    @Sendable
    @inlinable
    public func startReportJob(_ input: StartReportJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> StartReportJobOutput {
        try await self.client.execute(
            operation: "StartReportJob", 
            path: "/audit/report-jobs/{ReportPlanName}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an on-demand report job for the specified report plan.
    ///
    /// Parameters:
    ///   - idempotencyToken: A customer-chosen string that you can use to distinguish between otherwise identical calls to StartReportJobInput. Retrying a successful request with the same idempotency token results in a success message with no action taken.
    ///   - reportPlanName: The unique name of a report plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func startReportJob(
        idempotencyToken: String? = StartReportJobInput.idempotencyToken(),
        reportPlanName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartReportJobOutput {
        let input = StartReportJobInput(
            idempotencyToken: idempotencyToken, 
            reportPlanName: reportPlanName
        )
        return try await self.startReportJob(input, logger: logger)
    }

    /// Recovers the saved resource identified by an Amazon Resource Name (ARN).
    @Sendable
    @inlinable
    public func startRestoreJob(_ input: StartRestoreJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> StartRestoreJobOutput {
        try await self.client.execute(
            operation: "StartRestoreJob", 
            path: "/restore-jobs", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Recovers the saved resource identified by an Amazon Resource Name (ARN).
    ///
    /// Parameters:
    ///   - copySourceTagsToRestoredResource: This is an optional parameter. If this equals True, tags included in the backup will be copied to the restored resource. This can only be applied to backups created through Backup.
    ///   - iamRoleArn: The Amazon Resource Name (ARN) of the IAM role that Backup uses to create the target resource; for example: arn:aws:iam::123456789012:role/S3Access.
    ///   - idempotencyToken: A customer-chosen string that you can use to distinguish between otherwise identical calls to StartRestoreJob. Retrying a successful request with the same idempotency token results in a success message with no action taken.
    ///   - metadata: A set of metadata key-value pairs. You can get configuration metadata about a resource at the time it was backed up by calling GetRecoveryPointRestoreMetadata. However, values in addition to those provided by GetRecoveryPointRestoreMetadata might be required to restore a resource. For example, you might need to provide a new resource name if the original already exists. For more information about the metadata for each resource, see the following:    Metadata for Amazon Aurora     Metadata for Amazon DocumentDB     Metadata for CloudFormation     Metadata for Amazon DynamoDB      Metadata for Amazon EBS     Metadata for Amazon EC2     Metadata for Amazon EFS     Metadata for Amazon FSx     Metadata for Amazon Neptune     Metadata for Amazon RDS     Metadata for Amazon Redshift     Metadata for Storage Gateway     Metadata for Amazon S3     Metadata for Amazon Timestream     Metadata for virtual machines
    ///   - recoveryPointArn: An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - resourceType: Starts a job to restore a recovery point for one of the following resources:    Aurora - Amazon Aurora    DocumentDB - Amazon DocumentDB    CloudFormation - CloudFormation    DynamoDB - Amazon DynamoDB    EBS - Amazon Elastic Block Store    EC2 - Amazon Elastic Compute Cloud    EFS - Amazon Elastic File System    FSx - Amazon FSx    Neptune - Amazon Neptune    RDS - Amazon Relational Database Service    Redshift - Amazon Redshift    Storage Gateway - Storage Gateway    S3 - Amazon Simple Storage Service    Timestream - Amazon Timestream    VirtualMachine - Virtual machines
    ///   - logger: Logger use during operation
    @inlinable
    public func startRestoreJob(
        copySourceTagsToRestoredResource: Bool? = nil,
        iamRoleArn: String? = nil,
        idempotencyToken: String? = StartRestoreJobInput.idempotencyToken(),
        metadata: [String: String],
        recoveryPointArn: String,
        resourceType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartRestoreJobOutput {
        let input = StartRestoreJobInput(
            copySourceTagsToRestoredResource: copySourceTagsToRestoredResource, 
            iamRoleArn: iamRoleArn, 
            idempotencyToken: idempotencyToken, 
            metadata: metadata, 
            recoveryPointArn: recoveryPointArn, 
            resourceType: resourceType
        )
        return try await self.startRestoreJob(input, logger: logger)
    }

    /// Attempts to cancel a job to create a one-time backup of a resource. This action is not supported for the following services:   Amazon Aurora   Amazon DocumentDB (with MongoDB compatibility)   Amazon FSx for Lustre   Amazon FSx for NetApp ONTAP   Amazon FSx for OpenZFS   Amazon FSx for Windows File Server   Amazon Neptune   SAP HANA databases on Amazon EC2 instances   Amazon RDS
    @Sendable
    @inlinable
    public func stopBackupJob(_ input: StopBackupJobInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "StopBackupJob", 
            path: "/backup-jobs/{BackupJobId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attempts to cancel a job to create a one-time backup of a resource. This action is not supported for the following services:   Amazon Aurora   Amazon DocumentDB (with MongoDB compatibility)   Amazon FSx for Lustre   Amazon FSx for NetApp ONTAP   Amazon FSx for OpenZFS   Amazon FSx for Windows File Server   Amazon Neptune   SAP HANA databases on Amazon EC2 instances   Amazon RDS
    ///
    /// Parameters:
    ///   - backupJobId: Uniquely identifies a request to Backup to back up a resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopBackupJob(
        backupJobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = StopBackupJobInput(
            backupJobId: backupJobId
        )
        return try await self.stopBackupJob(input, logger: logger)
    }

    /// Assigns a set of key-value pairs to a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags/{ResourceArn}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Assigns a set of key-value pairs to a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN that uniquely identifies the resource.
    ///   - tags: Key-value pairs that are used to help organize your resources. You can assign your own metadata to the resources you create. For clarity, this is the structure to assign tags: [{"Key":"string","Value":"string"}].
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = TagResourceInput(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes a set of key-value pairs from a recovery point, backup plan, or backup vault identified by an Amazon Resource Name (ARN) This API is not supported for recovery points for resource types  including Aurora, Amazon DocumentDB. Amazon EBS,  Amazon FSx, Neptune, and Amazon RDS.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/untag/{ResourceArn}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a set of key-value pairs from a recovery point, backup plan, or backup vault identified by an Amazon Resource Name (ARN) This API is not supported for recovery points for resource types  including Aurora, Amazon DocumentDB. Amazon EBS,  Amazon FSx, Neptune, and Amazon RDS.
    ///
    /// Parameters:
    ///   - resourceArn: An ARN that uniquely identifies a resource. The format of the ARN depends on the type of the tagged resource. ARNs that do not include backup are incompatible with tagging.  TagResource and UntagResource with invalid ARNs will  result in an error. Acceptable ARN content can include  arn:aws:backup:us-east. Invalid ARN content may look like  arn:aws:ec2:us-east.
    ///   - tagKeyList: The keys to identify which key-value tags to remove from a resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeyList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UntagResourceInput(
            resourceArn: resourceArn, 
            tagKeyList: tagKeyList
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates the specified backup plan. The new version is uniquely identified by its ID.
    @Sendable
    @inlinable
    public func updateBackupPlan(_ input: UpdateBackupPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateBackupPlanOutput {
        try await self.client.execute(
            operation: "UpdateBackupPlan", 
            path: "/backup/plans/{BackupPlanId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified backup plan. The new version is uniquely identified by its ID.
    ///
    /// Parameters:
    ///   - backupPlan: The body of a backup plan. Includes a BackupPlanName and one or more sets of Rules.
    ///   - backupPlanId: The ID of the backup plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateBackupPlan(
        backupPlan: BackupPlanInput,
        backupPlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateBackupPlanOutput {
        let input = UpdateBackupPlanInput(
            backupPlan: backupPlan, 
            backupPlanId: backupPlanId
        )
        return try await self.updateBackupPlan(input, logger: logger)
    }

    /// Updates the specified framework.
    @Sendable
    @inlinable
    public func updateFramework(_ input: UpdateFrameworkInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFrameworkOutput {
        try await self.client.execute(
            operation: "UpdateFramework", 
            path: "/audit/frameworks/{FrameworkName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified framework.
    ///
    /// Parameters:
    ///   - frameworkControls: The controls that make up the framework. Each control in the list has a name, input parameters, and scope.
    ///   - frameworkDescription: An optional description of the framework with a maximum 1,024 characters.
    ///   - frameworkName: The unique name of a framework. This name is between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).
    ///   - idempotencyToken: A customer-chosen string that you can use to distinguish between otherwise identical calls to UpdateFrameworkInput. Retrying a successful request with the same idempotency token results in a success message with no action taken.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFramework(
        frameworkControls: [FrameworkControl]? = nil,
        frameworkDescription: String? = nil,
        frameworkName: String,
        idempotencyToken: String? = UpdateFrameworkInput.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFrameworkOutput {
        let input = UpdateFrameworkInput(
            frameworkControls: frameworkControls, 
            frameworkDescription: frameworkDescription, 
            frameworkName: frameworkName, 
            idempotencyToken: idempotencyToken
        )
        return try await self.updateFramework(input, logger: logger)
    }

    /// Updates whether the Amazon Web Services account is opted in to cross-account backup. Returns an error if the account is not an Organizations management account. Use the DescribeGlobalSettings API to determine the current settings.
    @Sendable
    @inlinable
    public func updateGlobalSettings(_ input: UpdateGlobalSettingsInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateGlobalSettings", 
            path: "/global-settings", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates whether the Amazon Web Services account is opted in to cross-account backup. Returns an error if the account is not an Organizations management account. Use the DescribeGlobalSettings API to determine the current settings.
    ///
    /// Parameters:
    ///   - globalSettings: Inputs can include: A value for isCrossAccountBackupEnabled and a Region. Example: update-global-settings --global-settings isCrossAccountBackupEnabled=false --region us-west-2. A value for Multi-party approval, styled as "Mpa": isMpaEnabled. Values can be true or false. Example: update-global-settings --global-settings isMpaEnabled=false --region us-west-2.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateGlobalSettings(
        globalSettings: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateGlobalSettingsInput(
            globalSettings: globalSettings
        )
        return try await self.updateGlobalSettings(input, logger: logger)
    }

    /// This operation updates the settings of a recovery point index. Required: BackupVaultName, RecoveryPointArn, and IAMRoleArn
    @Sendable
    @inlinable
    public func updateRecoveryPointIndexSettings(_ input: UpdateRecoveryPointIndexSettingsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRecoveryPointIndexSettingsOutput {
        try await self.client.execute(
            operation: "UpdateRecoveryPointIndexSettings", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points/{RecoveryPointArn}/index", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This operation updates the settings of a recovery point index. Required: BackupVaultName, RecoveryPointArn, and IAMRoleArn
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. Accepted characters include lowercase letters, numbers, and hyphens.
    ///   - iamRoleArn: This specifies the IAM role ARN used for this operation. For example, arn:aws:iam::123456789012:role/S3Access
    ///   - index: Index can have 1 of 2 possible values, either ENABLED or  DISABLED. To create a backup index for an eligible ACTIVE recovery point  that does not yet have a backup index, set value to ENABLED. To delete a backup index, set value to DISABLED.
    ///   - recoveryPointArn: An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRecoveryPointIndexSettings(
        backupVaultName: String,
        iamRoleArn: String? = nil,
        index: Index,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRecoveryPointIndexSettingsOutput {
        let input = UpdateRecoveryPointIndexSettingsInput(
            backupVaultName: backupVaultName, 
            iamRoleArn: iamRoleArn, 
            index: index, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.updateRecoveryPointIndexSettings(input, logger: logger)
    }

    /// Sets the transition lifecycle of a recovery point. The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. Backup transitions and expires backups automatically according to the lifecycle that you define. Resource types that can transition to cold storage are listed in the Feature availability by resource table. Backup ignores this expression for other resource types. Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “retention” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold.  If your lifecycle currently uses the parameters DeleteAfterDays and  MoveToColdStorageAfterDays, include these parameters and their values when you call  this operation. Not including them may result in your plan updating with null values.  This operation does not support continuous backups.
    @Sendable
    @inlinable
    public func updateRecoveryPointLifecycle(_ input: UpdateRecoveryPointLifecycleInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRecoveryPointLifecycleOutput {
        try await self.client.execute(
            operation: "UpdateRecoveryPointLifecycle", 
            path: "/backup-vaults/{BackupVaultName}/recovery-points/{RecoveryPointArn}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sets the transition lifecycle of a recovery point. The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. Backup transitions and expires backups automatically according to the lifecycle that you define. Resource types that can transition to cold storage are listed in the Feature availability by resource table. Backup ignores this expression for other resource types. Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “retention” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold.  If your lifecycle currently uses the parameters DeleteAfterDays and  MoveToColdStorageAfterDays, include these parameters and their values when you call  this operation. Not including them may result in your plan updating with null values.  This operation does not support continuous backups.
    ///
    /// Parameters:
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - lifecycle: The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. Backup transitions and expires backups automatically according to the lifecycle that you define.  Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “retention” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold.
    ///   - recoveryPointArn: An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRecoveryPointLifecycle(
        backupVaultName: String,
        lifecycle: Lifecycle? = nil,
        recoveryPointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRecoveryPointLifecycleOutput {
        let input = UpdateRecoveryPointLifecycleInput(
            backupVaultName: backupVaultName, 
            lifecycle: lifecycle, 
            recoveryPointArn: recoveryPointArn
        )
        return try await self.updateRecoveryPointLifecycle(input, logger: logger)
    }

    /// Updates the current service opt-in settings for the Region. Use the DescribeRegionSettings API to determine the resource types that are supported.
    @Sendable
    @inlinable
    public func updateRegionSettings(_ input: UpdateRegionSettingsInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateRegionSettings", 
            path: "/account-settings", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the current service opt-in settings for the Region. Use the DescribeRegionSettings API to determine the resource types that are supported.
    ///
    /// Parameters:
    ///   - resourceTypeManagementPreference: Enables or disables full Backup management of backups for a resource type. To enable full Backup management for DynamoDB along with  Backup's advanced DynamoDB backup features, follow the procedure to  enable advanced DynamoDB backup programmatically.
    ///   - resourceTypeOptInPreference: Updates the list of services along with the opt-in preferences for the Region. If resource assignments are only based on tags, then service opt-in settings are applied.  If a resource type is explicitly assigned to a backup plan, such as Amazon S3,  Amazon EC2, or Amazon RDS, it will be included in the  backup even if the opt-in is not enabled for that particular service.  If both a resource type and tags are specified in a resource assignment,  the resource type specified in the backup plan takes priority over the  tag condition. Service opt-in settings are disregarded in this situation.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRegionSettings(
        resourceTypeManagementPreference: [String: Bool]? = nil,
        resourceTypeOptInPreference: [String: Bool]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateRegionSettingsInput(
            resourceTypeManagementPreference: resourceTypeManagementPreference, 
            resourceTypeOptInPreference: resourceTypeOptInPreference
        )
        return try await self.updateRegionSettings(input, logger: logger)
    }

    /// Updates the specified report plan.
    @Sendable
    @inlinable
    public func updateReportPlan(_ input: UpdateReportPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateReportPlanOutput {
        try await self.client.execute(
            operation: "UpdateReportPlan", 
            path: "/audit/report-plans/{ReportPlanName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified report plan.
    ///
    /// Parameters:
    ///   - idempotencyToken: A customer-chosen string that you can use to distinguish between otherwise identical calls to UpdateReportPlanInput. Retrying a successful request with the same idempotency token results in a success message with no action taken.
    ///   - reportDeliveryChannel: The information about where to deliver your reports, specifically your Amazon S3 bucket name, S3 key prefix, and the formats of your reports.
    ///   - reportPlanDescription: An optional description of the report plan with a maximum 1,024 characters.
    ///   - reportPlanName: The unique name of the report plan. This name is between 1 and 256 characters, starting with a letter, and consisting of letters (a-z, A-Z), numbers (0-9), and underscores (_).
    ///   - reportSetting: The report template for the report. Reports are built using a report template. The report templates are:  RESOURCE_COMPLIANCE_REPORT | CONTROL_COMPLIANCE_REPORT | BACKUP_JOB_REPORT | COPY_JOB_REPORT | RESTORE_JOB_REPORT  If the report template is RESOURCE_COMPLIANCE_REPORT or CONTROL_COMPLIANCE_REPORT, this API resource also describes the report coverage by Amazon Web Services Regions and frameworks.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateReportPlan(
        idempotencyToken: String? = UpdateReportPlanInput.idempotencyToken(),
        reportDeliveryChannel: ReportDeliveryChannel? = nil,
        reportPlanDescription: String? = nil,
        reportPlanName: String,
        reportSetting: ReportSetting? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateReportPlanOutput {
        let input = UpdateReportPlanInput(
            idempotencyToken: idempotencyToken, 
            reportDeliveryChannel: reportDeliveryChannel, 
            reportPlanDescription: reportPlanDescription, 
            reportPlanName: reportPlanName, 
            reportSetting: reportSetting
        )
        return try await self.updateReportPlan(input, logger: logger)
    }

    /// This request will send changes to your specified restore testing  plan. RestoreTestingPlanName  cannot be updated after it is created.  RecoveryPointSelection can contain:    Algorithm     ExcludeVaults     IncludeVaults     RecoveryPointTypes     SelectionWindowDays
    @Sendable
    @inlinable
    public func updateRestoreTestingPlan(_ input: UpdateRestoreTestingPlanInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRestoreTestingPlanOutput {
        try await self.client.execute(
            operation: "UpdateRestoreTestingPlan", 
            path: "/restore-testing/plans/{RestoreTestingPlanName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This request will send changes to your specified restore testing  plan. RestoreTestingPlanName  cannot be updated after it is created.  RecoveryPointSelection can contain:    Algorithm     ExcludeVaults     IncludeVaults     RecoveryPointTypes     SelectionWindowDays
    ///
    /// Parameters:
    ///   - restoreTestingPlan: Specifies the body of a restore testing plan.
    ///   - restoreTestingPlanName: The name of the restore testing plan name.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRestoreTestingPlan(
        restoreTestingPlan: RestoreTestingPlanForUpdate,
        restoreTestingPlanName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRestoreTestingPlanOutput {
        let input = UpdateRestoreTestingPlanInput(
            restoreTestingPlan: restoreTestingPlan, 
            restoreTestingPlanName: restoreTestingPlanName
        )
        return try await self.updateRestoreTestingPlan(input, logger: logger)
    }

    /// Updates the specified restore testing selection. Most elements except the RestoreTestingSelectionName  can be updated with this request. You can use either protected resource ARNs or conditions, but not both.
    @Sendable
    @inlinable
    public func updateRestoreTestingSelection(_ input: UpdateRestoreTestingSelectionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRestoreTestingSelectionOutput {
        try await self.client.execute(
            operation: "UpdateRestoreTestingSelection", 
            path: "/restore-testing/plans/{RestoreTestingPlanName}/selections/{RestoreTestingSelectionName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified restore testing selection. Most elements except the RestoreTestingSelectionName  can be updated with this request. You can use either protected resource ARNs or conditions, but not both.
    ///
    /// Parameters:
    ///   - restoreTestingPlanName: The restore testing plan name is required to update the  indicated testing plan.
    ///   - restoreTestingSelection: To update your restore testing selection, you can use either  protected resource ARNs or conditions, but not both. That is, if your  selection has ProtectedResourceArns, requesting an update  with the parameter ProtectedResourceConditions will be  unsuccessful.
    ///   - restoreTestingSelectionName: The required restore testing selection name of the restore  testing selection you wish to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRestoreTestingSelection(
        restoreTestingPlanName: String,
        restoreTestingSelection: RestoreTestingSelectionForUpdate,
        restoreTestingSelectionName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRestoreTestingSelectionOutput {
        let input = UpdateRestoreTestingSelectionInput(
            restoreTestingPlanName: restoreTestingPlanName, 
            restoreTestingSelection: restoreTestingSelection, 
            restoreTestingSelectionName: restoreTestingSelectionName
        )
        return try await self.updateRestoreTestingSelection(input, logger: logger)
    }
}

extension Backup {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: Backup, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension Backup {
    /// Return PaginatorSequence for operation ``listBackupJobSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupJobSummariesPaginator(
        _ input: ListBackupJobSummariesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBackupJobSummariesInput, ListBackupJobSummariesOutput> {
        return .init(
            input: input,
            command: self.listBackupJobSummaries,
            inputKey: \ListBackupJobSummariesInput.nextToken,
            outputKey: \ListBackupJobSummariesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBackupJobSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountId: Returns the job count for the specified account. If the request is sent from a member account or an account  not part of Amazon Web Services Organizations, jobs within requestor's account  will be returned. Root, admin, and delegated administrator accounts can use  the value ANY to return job counts from every account in the  organization.  AGGREGATE_ALL aggregates job counts  from all accounts within the authenticated organization,  then returns the sum.
    ///   - aggregationPeriod: The period for the returned results.    ONE_DAY - The daily job count for the prior 14 days.    SEVEN_DAYS - The aggregated job count for the prior 7 days.    FOURTEEN_DAYS - The aggregated job count for prior 14 days.
    ///   - maxResults: The maximum number of items to be returned. The value is an integer. Range of accepted values is from  1 to 500.
    ///   - messageCategory: This parameter returns the job count for the specified  message category. Example accepted strings include AccessDenied,  Success, and InvalidParameters. See  Monitoring  for a list of accepted MessageCategory strings. The the value ANY returns count of all message categories.  AGGREGATE_ALL aggregates job counts  for all message categories and returns the sum.
    ///   - resourceType: Returns the job count for the specified resource type.  Use request GetSupportedResourceTypes to obtain  strings for supported resource types. The the value ANY returns count of all resource types.  AGGREGATE_ALL aggregates job counts  for all resource types and returns the sum. The type of Amazon Web Services resource to be backed up; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
    ///   - state: This parameter returns the job count for jobs with the specified state. The the value ANY returns count of all states.  AGGREGATE_ALL aggregates job counts for all states and returns the sum.  Completed with issues is a status found only in the Backup console. For API, this status refers to jobs with a state of COMPLETED and a MessageCategory with a value other than SUCCESS; that is, the status is completed but comes with a status message. To obtain the job count for Completed with issues, run two GET requests, and subtract the second, smaller number: GET /audit/backup-job-summaries?AggregationPeriod=FOURTEEN_DAYS&State=COMPLETED GET /audit/backup-job-summaries?AggregationPeriod=FOURTEEN_DAYS&MessageCategory=SUCCESS&State=COMPLETED
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupJobSummariesPaginator(
        accountId: String? = nil,
        aggregationPeriod: AggregationPeriod? = nil,
        maxResults: Int? = nil,
        messageCategory: String? = nil,
        resourceType: String? = nil,
        state: BackupJobStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBackupJobSummariesInput, ListBackupJobSummariesOutput> {
        let input = ListBackupJobSummariesInput(
            accountId: accountId, 
            aggregationPeriod: aggregationPeriod, 
            maxResults: maxResults, 
            messageCategory: messageCategory, 
            resourceType: resourceType, 
            state: state
        )
        return self.listBackupJobSummariesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listBackupJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupJobsPaginator(
        _ input: ListBackupJobsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBackupJobsInput, ListBackupJobsOutput> {
        return .init(
            input: input,
            command: self.listBackupJobs,
            inputKey: \ListBackupJobsInput.nextToken,
            outputKey: \ListBackupJobsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBackupJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - byAccountId: The account ID to list the jobs from. Returns only backup jobs associated with the specified account ID. If used from an Organizations management account, passing * returns all jobs across the organization.
    ///   - byBackupVaultName: Returns only backup jobs that will be stored in the specified backup vault. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.
    ///   - byCompleteAfter: Returns only backup jobs completed after a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCompleteBefore: Returns only backup jobs completed before a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCreatedAfter: Returns only backup jobs that were created after the specified date.
    ///   - byCreatedBefore: Returns only backup jobs that were created before the specified date.
    ///   - byMessageCategory: This is an optional parameter that can be used to  filter out jobs with a MessageCategory which matches the  value you input. Example strings may include AccessDenied,  SUCCESS, AGGREGATE_ALL, and  InvalidParameters. View Monitoring  The wildcard () returns count of all message categories.  AGGREGATE_ALL aggregates job counts  for all message categories and returns the sum.
    ///   - byParentJobId: This is a filter to list child (nested) jobs based on parent job ID.
    ///   - byResourceArn: Returns only backup jobs that match the specified resource Amazon Resource Name (ARN).
    ///   - byResourceType: Returns only backup jobs for the specified resources:    Aurora for Amazon Aurora    CloudFormation for CloudFormation    DocumentDB for Amazon DocumentDB (with MongoDB compatibility)    DynamoDB for Amazon DynamoDB    EBS for Amazon Elastic Block Store    EC2 for Amazon Elastic Compute Cloud    EFS for Amazon Elastic File System    FSx for Amazon FSx    Neptune for Amazon Neptune    RDS for Amazon Relational Database Service    Redshift for Amazon Redshift    S3 for Amazon Simple Storage Service (Amazon S3)    SAP HANA on Amazon EC2 for SAP HANA databases  on Amazon Elastic Compute Cloud instances    Storage Gateway for Storage Gateway    Timestream for Amazon Timestream    VirtualMachine for VMware virtual machines
    ///   - byState: Returns only backup jobs that are in the specified state.  Completed with issues is a status found only in the Backup console. For API, this status refers to jobs with a state of COMPLETED and a MessageCategory with a value other than SUCCESS; that is, the status is completed but comes with a status message. To obtain the job count for Completed with issues, run two GET requests, and subtract the second, smaller number: GET /backup-jobs/?state=COMPLETED GET /backup-jobs/?messageCategory=SUCCESS&state=COMPLETED
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupJobsPaginator(
        byAccountId: String? = nil,
        byBackupVaultName: String? = nil,
        byCompleteAfter: Date? = nil,
        byCompleteBefore: Date? = nil,
        byCreatedAfter: Date? = nil,
        byCreatedBefore: Date? = nil,
        byMessageCategory: String? = nil,
        byParentJobId: String? = nil,
        byResourceArn: String? = nil,
        byResourceType: String? = nil,
        byState: BackupJobState? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBackupJobsInput, ListBackupJobsOutput> {
        let input = ListBackupJobsInput(
            byAccountId: byAccountId, 
            byBackupVaultName: byBackupVaultName, 
            byCompleteAfter: byCompleteAfter, 
            byCompleteBefore: byCompleteBefore, 
            byCreatedAfter: byCreatedAfter, 
            byCreatedBefore: byCreatedBefore, 
            byMessageCategory: byMessageCategory, 
            byParentJobId: byParentJobId, 
            byResourceArn: byResourceArn, 
            byResourceType: byResourceType, 
            byState: byState, 
            maxResults: maxResults
        )
        return self.listBackupJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listBackupPlanTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupPlanTemplatesPaginator(
        _ input: ListBackupPlanTemplatesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBackupPlanTemplatesInput, ListBackupPlanTemplatesOutput> {
        return .init(
            input: input,
            command: self.listBackupPlanTemplates,
            inputKey: \ListBackupPlanTemplatesInput.nextToken,
            outputKey: \ListBackupPlanTemplatesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBackupPlanTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupPlanTemplatesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBackupPlanTemplatesInput, ListBackupPlanTemplatesOutput> {
        let input = ListBackupPlanTemplatesInput(
            maxResults: maxResults
        )
        return self.listBackupPlanTemplatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listBackupPlanVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupPlanVersionsPaginator(
        _ input: ListBackupPlanVersionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBackupPlanVersionsInput, ListBackupPlanVersionsOutput> {
        return .init(
            input: input,
            command: self.listBackupPlanVersions,
            inputKey: \ListBackupPlanVersionsInput.nextToken,
            outputKey: \ListBackupPlanVersionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBackupPlanVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupPlanVersionsPaginator(
        backupPlanId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBackupPlanVersionsInput, ListBackupPlanVersionsOutput> {
        let input = ListBackupPlanVersionsInput(
            backupPlanId: backupPlanId, 
            maxResults: maxResults
        )
        return self.listBackupPlanVersionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listBackupPlans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupPlansPaginator(
        _ input: ListBackupPlansInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBackupPlansInput, ListBackupPlansOutput> {
        return .init(
            input: input,
            command: self.listBackupPlans,
            inputKey: \ListBackupPlansInput.nextToken,
            outputKey: \ListBackupPlansOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBackupPlans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - includeDeleted: A Boolean value with a default value of FALSE that returns deleted backup plans when set to TRUE.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupPlansPaginator(
        includeDeleted: Bool? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBackupPlansInput, ListBackupPlansOutput> {
        let input = ListBackupPlansInput(
            includeDeleted: includeDeleted, 
            maxResults: maxResults
        )
        return self.listBackupPlansPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listBackupSelections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupSelectionsPaginator(
        _ input: ListBackupSelectionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBackupSelectionsInput, ListBackupSelectionsOutput> {
        return .init(
            input: input,
            command: self.listBackupSelections,
            inputKey: \ListBackupSelectionsInput.nextToken,
            outputKey: \ListBackupSelectionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBackupSelections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - backupPlanId: Uniquely identifies a backup plan.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupSelectionsPaginator(
        backupPlanId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBackupSelectionsInput, ListBackupSelectionsOutput> {
        let input = ListBackupSelectionsInput(
            backupPlanId: backupPlanId, 
            maxResults: maxResults
        )
        return self.listBackupSelectionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listBackupVaults(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupVaultsPaginator(
        _ input: ListBackupVaultsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBackupVaultsInput, ListBackupVaultsOutput> {
        return .init(
            input: input,
            command: self.listBackupVaults,
            inputKey: \ListBackupVaultsInput.nextToken,
            outputKey: \ListBackupVaultsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBackupVaults(_:logger:)``.
    ///
    /// - Parameters:
    ///   - byShared: This parameter will sort the list of vaults by shared vaults.
    ///   - byVaultType: This parameter will sort the list of vaults by vault type.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listBackupVaultsPaginator(
        byShared: Bool? = nil,
        byVaultType: VaultType? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBackupVaultsInput, ListBackupVaultsOutput> {
        let input = ListBackupVaultsInput(
            byShared: byShared, 
            byVaultType: byVaultType, 
            maxResults: maxResults
        )
        return self.listBackupVaultsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCopyJobSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCopyJobSummariesPaginator(
        _ input: ListCopyJobSummariesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCopyJobSummariesInput, ListCopyJobSummariesOutput> {
        return .init(
            input: input,
            command: self.listCopyJobSummaries,
            inputKey: \ListCopyJobSummariesInput.nextToken,
            outputKey: \ListCopyJobSummariesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCopyJobSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountId: Returns the job count for the specified account. If the request is sent from a member account or an account  not part of Amazon Web Services Organizations, jobs within requestor's account  will be returned. Root, admin, and delegated administrator accounts can use  the value ANY to return job counts from every account in the  organization.  AGGREGATE_ALL aggregates job counts  from all accounts within the authenticated organization,  then returns the sum.
    ///   - aggregationPeriod: The period for the returned results.    ONE_DAY - The daily job count for the prior 14 days.    SEVEN_DAYS - The aggregated job count for the prior 7 days.    FOURTEEN_DAYS - The aggregated job count for prior 14 days.
    ///   - maxResults: This parameter sets the maximum number of items  to be returned. The value is an integer. Range of accepted values is from  1 to 500.
    ///   - messageCategory: This parameter returns the job count for the specified  message category. Example accepted strings include AccessDenied,  Success, and InvalidParameters. See  Monitoring  for a list of accepted MessageCategory strings. The the value ANY returns count of all message categories.  AGGREGATE_ALL aggregates job counts  for all message categories and returns the sum.
    ///   - resourceType: Returns the job count for the specified resource type.  Use request GetSupportedResourceTypes to obtain  strings for supported resource types. The the value ANY returns count of all resource types.  AGGREGATE_ALL aggregates job counts  for all resource types and returns the sum. The type of Amazon Web Services resource to be backed up; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
    ///   - state: This parameter returns the job count for jobs  with the specified state. The the value ANY returns count of all states.  AGGREGATE_ALL aggregates job counts  for all states and returns the sum.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCopyJobSummariesPaginator(
        accountId: String? = nil,
        aggregationPeriod: AggregationPeriod? = nil,
        maxResults: Int? = nil,
        messageCategory: String? = nil,
        resourceType: String? = nil,
        state: CopyJobStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCopyJobSummariesInput, ListCopyJobSummariesOutput> {
        let input = ListCopyJobSummariesInput(
            accountId: accountId, 
            aggregationPeriod: aggregationPeriod, 
            maxResults: maxResults, 
            messageCategory: messageCategory, 
            resourceType: resourceType, 
            state: state
        )
        return self.listCopyJobSummariesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCopyJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCopyJobsPaginator(
        _ input: ListCopyJobsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCopyJobsInput, ListCopyJobsOutput> {
        return .init(
            input: input,
            command: self.listCopyJobs,
            inputKey: \ListCopyJobsInput.nextToken,
            outputKey: \ListCopyJobsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCopyJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - byAccountId: The account ID to list the jobs from. Returns only copy jobs associated with the specified account ID.
    ///   - byCompleteAfter: Returns only copy jobs completed after a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCompleteBefore: Returns only copy jobs completed before a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCreatedAfter: Returns only copy jobs that were created after the specified date.
    ///   - byCreatedBefore: Returns only copy jobs that were created before the specified date.
    ///   - byDestinationVaultArn: An Amazon Resource Name (ARN) that uniquely identifies a source backup vault to copy from; for example, arn:aws:backup:us-east-1:123456789012:backup-vault:aBackupVault.
    ///   - byMessageCategory: This is an optional parameter that can be used to  filter out jobs with a MessageCategory which matches the  value you input. Example strings may include AccessDenied,  SUCCESS, AGGREGATE_ALL, and  INVALIDPARAMETERS. View  Monitoring for a list of accepted strings. The the value ANY returns count of all message categories.  AGGREGATE_ALL aggregates job counts  for all message categories and returns the sum.
    ///   - byParentJobId: This is a filter to list child (nested) jobs based on parent job ID.
    ///   - byResourceArn: Returns only copy jobs that match the specified resource Amazon Resource Name (ARN).
    ///   - byResourceType: Returns only backup jobs for the specified resources:    Aurora for Amazon Aurora    CloudFormation for CloudFormation    DocumentDB for Amazon DocumentDB (with MongoDB compatibility)    DynamoDB for Amazon DynamoDB    EBS for Amazon Elastic Block Store    EC2 for Amazon Elastic Compute Cloud    EFS for Amazon Elastic File System    FSx for Amazon FSx    Neptune for Amazon Neptune    RDS for Amazon Relational Database Service    Redshift for Amazon Redshift    S3 for Amazon Simple Storage Service (Amazon S3)    SAP HANA on Amazon EC2 for SAP HANA databases  on Amazon Elastic Compute Cloud instances    Storage Gateway for Storage Gateway    Timestream for Amazon Timestream    VirtualMachine for VMware virtual machines
    ///   - byState: Returns only copy jobs that are in the specified state.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCopyJobsPaginator(
        byAccountId: String? = nil,
        byCompleteAfter: Date? = nil,
        byCompleteBefore: Date? = nil,
        byCreatedAfter: Date? = nil,
        byCreatedBefore: Date? = nil,
        byDestinationVaultArn: String? = nil,
        byMessageCategory: String? = nil,
        byParentJobId: String? = nil,
        byResourceArn: String? = nil,
        byResourceType: String? = nil,
        byState: CopyJobState? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCopyJobsInput, ListCopyJobsOutput> {
        let input = ListCopyJobsInput(
            byAccountId: byAccountId, 
            byCompleteAfter: byCompleteAfter, 
            byCompleteBefore: byCompleteBefore, 
            byCreatedAfter: byCreatedAfter, 
            byCreatedBefore: byCreatedBefore, 
            byDestinationVaultArn: byDestinationVaultArn, 
            byMessageCategory: byMessageCategory, 
            byParentJobId: byParentJobId, 
            byResourceArn: byResourceArn, 
            byResourceType: byResourceType, 
            byState: byState, 
            maxResults: maxResults
        )
        return self.listCopyJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFrameworks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFrameworksPaginator(
        _ input: ListFrameworksInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFrameworksInput, ListFrameworksOutput> {
        return .init(
            input: input,
            command: self.listFrameworks,
            inputKey: \ListFrameworksInput.nextToken,
            outputKey: \ListFrameworksOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFrameworks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The number of desired results from 1 to 1000. Optional. If unspecified, the query will return 1 MB of data.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFrameworksPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFrameworksInput, ListFrameworksOutput> {
        let input = ListFrameworksInput(
            maxResults: maxResults
        )
        return self.listFrameworksPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listIndexedRecoveryPoints(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listIndexedRecoveryPointsPaginator(
        _ input: ListIndexedRecoveryPointsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListIndexedRecoveryPointsInput, ListIndexedRecoveryPointsOutput> {
        return .init(
            input: input,
            command: self.listIndexedRecoveryPoints,
            inputKey: \ListIndexedRecoveryPointsInput.nextToken,
            outputKey: \ListIndexedRecoveryPointsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listIndexedRecoveryPoints(_:logger:)``.
    ///
    /// - Parameters:
    ///   - createdAfter: Returns only indexed recovery points that were created after the  specified date.
    ///   - createdBefore: Returns only indexed recovery points that were created before the  specified date.
    ///   - indexStatus: Include this parameter to filter the returned list by  the indicated statuses. Accepted values: PENDING | ACTIVE | FAILED | DELETING  A recovery point with an index that has the status of ACTIVE  can be included in a search.
    ///   - maxResults: The maximum number of resource list items to be returned.
    ///   - resourceType: Returns a list of indexed recovery points for the specified  resource type(s). Accepted values include:    EBS for Amazon Elastic Block Store    S3 for Amazon Simple Storage Service (Amazon S3)
    ///   - sourceResourceArn: A string of the  Amazon Resource Name (ARN) that uniquely identifies  the source resource.
    ///   - logger: Logger used for logging
    @inlinable
    public func listIndexedRecoveryPointsPaginator(
        createdAfter: Date? = nil,
        createdBefore: Date? = nil,
        indexStatus: IndexStatus? = nil,
        maxResults: Int? = nil,
        resourceType: String? = nil,
        sourceResourceArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListIndexedRecoveryPointsInput, ListIndexedRecoveryPointsOutput> {
        let input = ListIndexedRecoveryPointsInput(
            createdAfter: createdAfter, 
            createdBefore: createdBefore, 
            indexStatus: indexStatus, 
            maxResults: maxResults, 
            resourceType: resourceType, 
            sourceResourceArn: sourceResourceArn
        )
        return self.listIndexedRecoveryPointsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listLegalHolds(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listLegalHoldsPaginator(
        _ input: ListLegalHoldsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListLegalHoldsInput, ListLegalHoldsOutput> {
        return .init(
            input: input,
            command: self.listLegalHolds,
            inputKey: \ListLegalHoldsInput.nextToken,
            outputKey: \ListLegalHoldsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listLegalHolds(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of resource list items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listLegalHoldsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListLegalHoldsInput, ListLegalHoldsOutput> {
        let input = ListLegalHoldsInput(
            maxResults: maxResults
        )
        return self.listLegalHoldsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listProtectedResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listProtectedResourcesPaginator(
        _ input: ListProtectedResourcesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListProtectedResourcesInput, ListProtectedResourcesOutput> {
        return .init(
            input: input,
            command: self.listProtectedResources,
            inputKey: \ListProtectedResourcesInput.nextToken,
            outputKey: \ListProtectedResourcesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listProtectedResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listProtectedResourcesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListProtectedResourcesInput, ListProtectedResourcesOutput> {
        let input = ListProtectedResourcesInput(
            maxResults: maxResults
        )
        return self.listProtectedResourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listProtectedResourcesByBackupVault(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listProtectedResourcesByBackupVaultPaginator(
        _ input: ListProtectedResourcesByBackupVaultInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListProtectedResourcesByBackupVaultInput, ListProtectedResourcesByBackupVaultOutput> {
        return .init(
            input: input,
            command: self.listProtectedResourcesByBackupVault,
            inputKey: \ListProtectedResourcesByBackupVaultInput.nextToken,
            outputKey: \ListProtectedResourcesByBackupVaultOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listProtectedResourcesByBackupVault(_:logger:)``.
    ///
    /// - Parameters:
    ///   - backupVaultAccountId: The list of protected resources by backup vault within the vault(s) you specify by account ID.
    ///   - backupVaultName: The list of protected resources by backup vault within the vault(s) you specify by name.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listProtectedResourcesByBackupVaultPaginator(
        backupVaultAccountId: String? = nil,
        backupVaultName: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListProtectedResourcesByBackupVaultInput, ListProtectedResourcesByBackupVaultOutput> {
        let input = ListProtectedResourcesByBackupVaultInput(
            backupVaultAccountId: backupVaultAccountId, 
            backupVaultName: backupVaultName, 
            maxResults: maxResults
        )
        return self.listProtectedResourcesByBackupVaultPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRecoveryPointsByBackupVault(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecoveryPointsByBackupVaultPaginator(
        _ input: ListRecoveryPointsByBackupVaultInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRecoveryPointsByBackupVaultInput, ListRecoveryPointsByBackupVaultOutput> {
        return .init(
            input: input,
            command: self.listRecoveryPointsByBackupVault,
            inputKey: \ListRecoveryPointsByBackupVaultInput.nextToken,
            outputKey: \ListRecoveryPointsByBackupVaultOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRecoveryPointsByBackupVault(_:logger:)``.
    ///
    /// - Parameters:
    ///   - backupVaultAccountId: This parameter will sort the list of recovery points by account ID.
    ///   - backupVaultName: The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.  Backup vault name might not be available when a supported service creates the backup.
    ///   - byBackupPlanId: Returns only recovery points that match the specified backup plan ID.
    ///   - byCreatedAfter: Returns only recovery points that were created after the specified timestamp.
    ///   - byCreatedBefore: Returns only recovery points that were created before the specified timestamp.
    ///   - byParentRecoveryPointArn: This returns only recovery points that match the specified parent (composite) recovery point Amazon Resource Name (ARN).
    ///   - byResourceArn: Returns only recovery points that match the specified resource Amazon Resource Name (ARN).
    ///   - byResourceType: Returns only recovery points that match the specified resource type(s):    Aurora for Amazon Aurora    CloudFormation for CloudFormation    DocumentDB for Amazon DocumentDB (with MongoDB compatibility)    DynamoDB for Amazon DynamoDB    EBS for Amazon Elastic Block Store    EC2 for Amazon Elastic Compute Cloud    EFS for Amazon Elastic File System    FSx for Amazon FSx    Neptune for Amazon Neptune    RDS for Amazon Relational Database Service    Redshift for Amazon Redshift    S3 for Amazon Simple Storage Service (Amazon S3)    SAP HANA on Amazon EC2 for SAP HANA databases  on Amazon Elastic Compute Cloud instances    Storage Gateway for Storage Gateway    Timestream for Amazon Timestream    VirtualMachine for VMware virtual machines
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecoveryPointsByBackupVaultPaginator(
        backupVaultAccountId: String? = nil,
        backupVaultName: String,
        byBackupPlanId: String? = nil,
        byCreatedAfter: Date? = nil,
        byCreatedBefore: Date? = nil,
        byParentRecoveryPointArn: String? = nil,
        byResourceArn: String? = nil,
        byResourceType: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRecoveryPointsByBackupVaultInput, ListRecoveryPointsByBackupVaultOutput> {
        let input = ListRecoveryPointsByBackupVaultInput(
            backupVaultAccountId: backupVaultAccountId, 
            backupVaultName: backupVaultName, 
            byBackupPlanId: byBackupPlanId, 
            byCreatedAfter: byCreatedAfter, 
            byCreatedBefore: byCreatedBefore, 
            byParentRecoveryPointArn: byParentRecoveryPointArn, 
            byResourceArn: byResourceArn, 
            byResourceType: byResourceType, 
            maxResults: maxResults
        )
        return self.listRecoveryPointsByBackupVaultPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRecoveryPointsByLegalHold(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecoveryPointsByLegalHoldPaginator(
        _ input: ListRecoveryPointsByLegalHoldInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRecoveryPointsByLegalHoldInput, ListRecoveryPointsByLegalHoldOutput> {
        return .init(
            input: input,
            command: self.listRecoveryPointsByLegalHold,
            inputKey: \ListRecoveryPointsByLegalHoldInput.nextToken,
            outputKey: \ListRecoveryPointsByLegalHoldOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRecoveryPointsByLegalHold(_:logger:)``.
    ///
    /// - Parameters:
    ///   - legalHoldId: The ID of the legal hold.
    ///   - maxResults: The maximum number of resource list items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecoveryPointsByLegalHoldPaginator(
        legalHoldId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRecoveryPointsByLegalHoldInput, ListRecoveryPointsByLegalHoldOutput> {
        let input = ListRecoveryPointsByLegalHoldInput(
            legalHoldId: legalHoldId, 
            maxResults: maxResults
        )
        return self.listRecoveryPointsByLegalHoldPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRecoveryPointsByResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecoveryPointsByResourcePaginator(
        _ input: ListRecoveryPointsByResourceInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRecoveryPointsByResourceInput, ListRecoveryPointsByResourceOutput> {
        return .init(
            input: input,
            command: self.listRecoveryPointsByResource,
            inputKey: \ListRecoveryPointsByResourceInput.nextToken,
            outputKey: \ListRecoveryPointsByResourceOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRecoveryPointsByResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - managedByAWSBackupOnly: This attribute filters recovery points based on ownership. If this is  set to TRUE, the response will contain recovery points associated  with the selected resources that are managed by Backup. If this is set to FALSE, the response will contain all  recovery points associated with the selected resource. Type: Boolean
    ///   - maxResults: The maximum number of items to be returned.  Amazon RDS requires a value of at least 20.
    ///   - resourceArn: An ARN that uniquely identifies a resource. The format of the ARN depends on the resource type.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRecoveryPointsByResourcePaginator(
        managedByAWSBackupOnly: Bool? = nil,
        maxResults: Int? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRecoveryPointsByResourceInput, ListRecoveryPointsByResourceOutput> {
        let input = ListRecoveryPointsByResourceInput(
            managedByAWSBackupOnly: managedByAWSBackupOnly, 
            maxResults: maxResults, 
            resourceArn: resourceArn
        )
        return self.listRecoveryPointsByResourcePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listReportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listReportJobsPaginator(
        _ input: ListReportJobsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListReportJobsInput, ListReportJobsOutput> {
        return .init(
            input: input,
            command: self.listReportJobs,
            inputKey: \ListReportJobsInput.nextToken,
            outputKey: \ListReportJobsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listReportJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - byCreationAfter: Returns only report jobs that were created after the date and time specified in Unix format and Coordinated Universal Time (UTC). For example, the value 1516925490 represents Friday, January 26, 2018 12:11:30 AM.
    ///   - byCreationBefore: Returns only report jobs that were created before the date and time specified in Unix format and Coordinated Universal Time (UTC). For example, the value 1516925490 represents Friday, January 26, 2018 12:11:30 AM.
    ///   - byReportPlanName: Returns only report jobs with the specified report plan name.
    ///   - byStatus: Returns only report jobs that are in the specified status. The statuses are:  CREATED | RUNNING | COMPLETED | FAILED
    ///   - maxResults: The number of desired results from 1 to 1000. Optional. If unspecified, the query will return 1 MB of data.
    ///   - logger: Logger used for logging
    @inlinable
    public func listReportJobsPaginator(
        byCreationAfter: Date? = nil,
        byCreationBefore: Date? = nil,
        byReportPlanName: String? = nil,
        byStatus: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListReportJobsInput, ListReportJobsOutput> {
        let input = ListReportJobsInput(
            byCreationAfter: byCreationAfter, 
            byCreationBefore: byCreationBefore, 
            byReportPlanName: byReportPlanName, 
            byStatus: byStatus, 
            maxResults: maxResults
        )
        return self.listReportJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listReportPlans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listReportPlansPaginator(
        _ input: ListReportPlansInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListReportPlansInput, ListReportPlansOutput> {
        return .init(
            input: input,
            command: self.listReportPlans,
            inputKey: \ListReportPlansInput.nextToken,
            outputKey: \ListReportPlansOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listReportPlans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The number of desired results from 1 to 1000. Optional. If unspecified, the query will return 1 MB of data.
    ///   - logger: Logger used for logging
    @inlinable
    public func listReportPlansPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListReportPlansInput, ListReportPlansOutput> {
        let input = ListReportPlansInput(
            maxResults: maxResults
        )
        return self.listReportPlansPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRestoreAccessBackupVaults(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreAccessBackupVaultsPaginator(
        _ input: ListRestoreAccessBackupVaultsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRestoreAccessBackupVaultsInput, ListRestoreAccessBackupVaultsOutput> {
        return .init(
            input: input,
            command: self.listRestoreAccessBackupVaults,
            inputKey: \ListRestoreAccessBackupVaultsInput.nextToken,
            outputKey: \ListRestoreAccessBackupVaultsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRestoreAccessBackupVaults(_:logger:)``.
    ///
    /// - Parameters:
    ///   - backupVaultName: The name of the backup vault for which to list associated restore access backup vaults.
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreAccessBackupVaultsPaginator(
        backupVaultName: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRestoreAccessBackupVaultsInput, ListRestoreAccessBackupVaultsOutput> {
        let input = ListRestoreAccessBackupVaultsInput(
            backupVaultName: backupVaultName, 
            maxResults: maxResults
        )
        return self.listRestoreAccessBackupVaultsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRestoreJobSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreJobSummariesPaginator(
        _ input: ListRestoreJobSummariesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRestoreJobSummariesInput, ListRestoreJobSummariesOutput> {
        return .init(
            input: input,
            command: self.listRestoreJobSummaries,
            inputKey: \ListRestoreJobSummariesInput.nextToken,
            outputKey: \ListRestoreJobSummariesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRestoreJobSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountId: Returns the job count for the specified account. If the request is sent from a member account or an account  not part of Amazon Web Services Organizations, jobs within requestor's account  will be returned. Root, admin, and delegated administrator accounts can use  the value ANY to return job counts from every account in the  organization.  AGGREGATE_ALL aggregates job counts  from all accounts within the authenticated organization,  then returns the sum.
    ///   - aggregationPeriod: The period for the returned results.    ONE_DAY - The daily job count for the prior 14 days.    SEVEN_DAYS - The aggregated job count for the prior 7 days.    FOURTEEN_DAYS - The aggregated job count for prior 14 days.
    ///   - maxResults: This parameter sets the maximum number of items  to be returned. The value is an integer. Range of accepted values is from  1 to 500.
    ///   - resourceType: Returns the job count for the specified resource type.  Use request GetSupportedResourceTypes to obtain  strings for supported resource types. The the value ANY returns count of all resource types.  AGGREGATE_ALL aggregates job counts  for all resource types and returns the sum. The type of Amazon Web Services resource to be backed up; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
    ///   - state: This parameter returns the job count for jobs  with the specified state. The the value ANY returns count of all states.  AGGREGATE_ALL aggregates job counts  for all states and returns the sum.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreJobSummariesPaginator(
        accountId: String? = nil,
        aggregationPeriod: AggregationPeriod? = nil,
        maxResults: Int? = nil,
        resourceType: String? = nil,
        state: RestoreJobState? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRestoreJobSummariesInput, ListRestoreJobSummariesOutput> {
        let input = ListRestoreJobSummariesInput(
            accountId: accountId, 
            aggregationPeriod: aggregationPeriod, 
            maxResults: maxResults, 
            resourceType: resourceType, 
            state: state
        )
        return self.listRestoreJobSummariesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRestoreJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreJobsPaginator(
        _ input: ListRestoreJobsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRestoreJobsInput, ListRestoreJobsOutput> {
        return .init(
            input: input,
            command: self.listRestoreJobs,
            inputKey: \ListRestoreJobsInput.nextToken,
            outputKey: \ListRestoreJobsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRestoreJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - byAccountId: The account ID to list the jobs from. Returns only restore jobs associated with the specified account ID.
    ///   - byCompleteAfter: Returns only copy jobs completed after a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCompleteBefore: Returns only copy jobs completed before a date expressed in Unix format and Coordinated Universal Time (UTC).
    ///   - byCreatedAfter: Returns only restore jobs that were created after the specified date.
    ///   - byCreatedBefore: Returns only restore jobs that were created before the specified date.
    ///   - byResourceType: Include this parameter to return only restore jobs for the specified resources:    Aurora for Amazon Aurora    CloudFormation for CloudFormation    DocumentDB for Amazon DocumentDB (with MongoDB compatibility)    DynamoDB for Amazon DynamoDB    EBS for Amazon Elastic Block Store    EC2 for Amazon Elastic Compute Cloud    EFS for Amazon Elastic File System    FSx for Amazon FSx    Neptune for Amazon Neptune    RDS for Amazon Relational Database Service    Redshift for Amazon Redshift    S3 for Amazon Simple Storage Service (Amazon S3)    SAP HANA on Amazon EC2 for SAP HANA databases  on Amazon Elastic Compute Cloud instances    Storage Gateway for Storage Gateway    Timestream for Amazon Timestream    VirtualMachine for VMware virtual machines
    ///   - byRestoreTestingPlanArn: This returns only restore testing jobs that match the  specified resource Amazon Resource Name (ARN).
    ///   - byStatus: Returns only restore jobs associated with the specified job status.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreJobsPaginator(
        byAccountId: String? = nil,
        byCompleteAfter: Date? = nil,
        byCompleteBefore: Date? = nil,
        byCreatedAfter: Date? = nil,
        byCreatedBefore: Date? = nil,
        byResourceType: String? = nil,
        byRestoreTestingPlanArn: String? = nil,
        byStatus: RestoreJobStatus? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRestoreJobsInput, ListRestoreJobsOutput> {
        let input = ListRestoreJobsInput(
            byAccountId: byAccountId, 
            byCompleteAfter: byCompleteAfter, 
            byCompleteBefore: byCompleteBefore, 
            byCreatedAfter: byCreatedAfter, 
            byCreatedBefore: byCreatedBefore, 
            byResourceType: byResourceType, 
            byRestoreTestingPlanArn: byRestoreTestingPlanArn, 
            byStatus: byStatus, 
            maxResults: maxResults
        )
        return self.listRestoreJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRestoreJobsByProtectedResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreJobsByProtectedResourcePaginator(
        _ input: ListRestoreJobsByProtectedResourceInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRestoreJobsByProtectedResourceInput, ListRestoreJobsByProtectedResourceOutput> {
        return .init(
            input: input,
            command: self.listRestoreJobsByProtectedResource,
            inputKey: \ListRestoreJobsByProtectedResourceInput.nextToken,
            outputKey: \ListRestoreJobsByProtectedResourceOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRestoreJobsByProtectedResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - byRecoveryPointCreationDateAfter: Returns only restore jobs of recovery points that were created after the specified date.
    ///   - byRecoveryPointCreationDateBefore: Returns only restore jobs of recovery points that were created before the specified date.
    ///   - byStatus: Returns only restore jobs associated with the specified job status.
    ///   - maxResults: The maximum number of items to be returned.
    ///   - resourceArn: Returns only restore jobs that match the specified resource  Amazon Resource Name (ARN).
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreJobsByProtectedResourcePaginator(
        byRecoveryPointCreationDateAfter: Date? = nil,
        byRecoveryPointCreationDateBefore: Date? = nil,
        byStatus: RestoreJobStatus? = nil,
        maxResults: Int? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRestoreJobsByProtectedResourceInput, ListRestoreJobsByProtectedResourceOutput> {
        let input = ListRestoreJobsByProtectedResourceInput(
            byRecoveryPointCreationDateAfter: byRecoveryPointCreationDateAfter, 
            byRecoveryPointCreationDateBefore: byRecoveryPointCreationDateBefore, 
            byStatus: byStatus, 
            maxResults: maxResults, 
            resourceArn: resourceArn
        )
        return self.listRestoreJobsByProtectedResourcePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRestoreTestingPlans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreTestingPlansPaginator(
        _ input: ListRestoreTestingPlansInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRestoreTestingPlansInput, ListRestoreTestingPlansOutput> {
        return .init(
            input: input,
            command: self.listRestoreTestingPlans,
            inputKey: \ListRestoreTestingPlansInput.nextToken,
            outputKey: \ListRestoreTestingPlansOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRestoreTestingPlans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to be returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreTestingPlansPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRestoreTestingPlansInput, ListRestoreTestingPlansOutput> {
        let input = ListRestoreTestingPlansInput(
            maxResults: maxResults
        )
        return self.listRestoreTestingPlansPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRestoreTestingSelections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreTestingSelectionsPaginator(
        _ input: ListRestoreTestingSelectionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRestoreTestingSelectionsInput, ListRestoreTestingSelectionsOutput> {
        return .init(
            input: input,
            command: self.listRestoreTestingSelections,
            inputKey: \ListRestoreTestingSelectionsInput.nextToken,
            outputKey: \ListRestoreTestingSelectionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRestoreTestingSelections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to be returned.
    ///   - restoreTestingPlanName: Returns restore testing selections by the specified restore testing  plan name.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRestoreTestingSelectionsPaginator(
        maxResults: Int? = nil,
        restoreTestingPlanName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRestoreTestingSelectionsInput, ListRestoreTestingSelectionsOutput> {
        let input = ListRestoreTestingSelectionsInput(
            maxResults: maxResults, 
            restoreTestingPlanName: restoreTestingPlanName
        )
        return self.listRestoreTestingSelectionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTags(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsPaginator(
        _ input: ListTagsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTagsInput, ListTagsOutput> {
        return .init(
            input: input,
            command: self.listTags,
            inputKey: \ListTagsInput.nextToken,
            outputKey: \ListTagsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTags(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to be returned.
    ///   - resourceArn: An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the type of resource. Valid targets for ListTags are recovery points, backup plans, and backup vaults.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsPaginator(
        maxResults: Int? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTagsInput, ListTagsOutput> {
        let input = ListTagsInput(
            maxResults: maxResults, 
            resourceArn: resourceArn
        )
        return self.listTagsPaginator(input, logger: logger)
    }
}

extension Backup.ListBackupJobSummariesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListBackupJobSummariesInput {
        return .init(
            accountId: self.accountId,
            aggregationPeriod: self.aggregationPeriod,
            maxResults: self.maxResults,
            messageCategory: self.messageCategory,
            nextToken: token,
            resourceType: self.resourceType,
            state: self.state
        )
    }
}

extension Backup.ListBackupJobsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListBackupJobsInput {
        return .init(
            byAccountId: self.byAccountId,
            byBackupVaultName: self.byBackupVaultName,
            byCompleteAfter: self.byCompleteAfter,
            byCompleteBefore: self.byCompleteBefore,
            byCreatedAfter: self.byCreatedAfter,
            byCreatedBefore: self.byCreatedBefore,
            byMessageCategory: self.byMessageCategory,
            byParentJobId: self.byParentJobId,
            byResourceArn: self.byResourceArn,
            byResourceType: self.byResourceType,
            byState: self.byState,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListBackupPlanTemplatesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListBackupPlanTemplatesInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListBackupPlanVersionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListBackupPlanVersionsInput {
        return .init(
            backupPlanId: self.backupPlanId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListBackupPlansInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListBackupPlansInput {
        return .init(
            includeDeleted: self.includeDeleted,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListBackupSelectionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListBackupSelectionsInput {
        return .init(
            backupPlanId: self.backupPlanId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListBackupVaultsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListBackupVaultsInput {
        return .init(
            byShared: self.byShared,
            byVaultType: self.byVaultType,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListCopyJobSummariesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListCopyJobSummariesInput {
        return .init(
            accountId: self.accountId,
            aggregationPeriod: self.aggregationPeriod,
            maxResults: self.maxResults,
            messageCategory: self.messageCategory,
            nextToken: token,
            resourceType: self.resourceType,
            state: self.state
        )
    }
}

extension Backup.ListCopyJobsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListCopyJobsInput {
        return .init(
            byAccountId: self.byAccountId,
            byCompleteAfter: self.byCompleteAfter,
            byCompleteBefore: self.byCompleteBefore,
            byCreatedAfter: self.byCreatedAfter,
            byCreatedBefore: self.byCreatedBefore,
            byDestinationVaultArn: self.byDestinationVaultArn,
            byMessageCategory: self.byMessageCategory,
            byParentJobId: self.byParentJobId,
            byResourceArn: self.byResourceArn,
            byResourceType: self.byResourceType,
            byState: self.byState,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListFrameworksInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListFrameworksInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListIndexedRecoveryPointsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListIndexedRecoveryPointsInput {
        return .init(
            createdAfter: self.createdAfter,
            createdBefore: self.createdBefore,
            indexStatus: self.indexStatus,
            maxResults: self.maxResults,
            nextToken: token,
            resourceType: self.resourceType,
            sourceResourceArn: self.sourceResourceArn
        )
    }
}

extension Backup.ListLegalHoldsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListLegalHoldsInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListProtectedResourcesByBackupVaultInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListProtectedResourcesByBackupVaultInput {
        return .init(
            backupVaultAccountId: self.backupVaultAccountId,
            backupVaultName: self.backupVaultName,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListProtectedResourcesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListProtectedResourcesInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListRecoveryPointsByBackupVaultInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRecoveryPointsByBackupVaultInput {
        return .init(
            backupVaultAccountId: self.backupVaultAccountId,
            backupVaultName: self.backupVaultName,
            byBackupPlanId: self.byBackupPlanId,
            byCreatedAfter: self.byCreatedAfter,
            byCreatedBefore: self.byCreatedBefore,
            byParentRecoveryPointArn: self.byParentRecoveryPointArn,
            byResourceArn: self.byResourceArn,
            byResourceType: self.byResourceType,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListRecoveryPointsByLegalHoldInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRecoveryPointsByLegalHoldInput {
        return .init(
            legalHoldId: self.legalHoldId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListRecoveryPointsByResourceInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRecoveryPointsByResourceInput {
        return .init(
            managedByAWSBackupOnly: self.managedByAWSBackupOnly,
            maxResults: self.maxResults,
            nextToken: token,
            resourceArn: self.resourceArn
        )
    }
}

extension Backup.ListReportJobsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListReportJobsInput {
        return .init(
            byCreationAfter: self.byCreationAfter,
            byCreationBefore: self.byCreationBefore,
            byReportPlanName: self.byReportPlanName,
            byStatus: self.byStatus,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListReportPlansInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListReportPlansInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListRestoreAccessBackupVaultsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRestoreAccessBackupVaultsInput {
        return .init(
            backupVaultName: self.backupVaultName,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListRestoreJobSummariesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRestoreJobSummariesInput {
        return .init(
            accountId: self.accountId,
            aggregationPeriod: self.aggregationPeriod,
            maxResults: self.maxResults,
            nextToken: token,
            resourceType: self.resourceType,
            state: self.state
        )
    }
}

extension Backup.ListRestoreJobsByProtectedResourceInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRestoreJobsByProtectedResourceInput {
        return .init(
            byRecoveryPointCreationDateAfter: self.byRecoveryPointCreationDateAfter,
            byRecoveryPointCreationDateBefore: self.byRecoveryPointCreationDateBefore,
            byStatus: self.byStatus,
            maxResults: self.maxResults,
            nextToken: token,
            resourceArn: self.resourceArn
        )
    }
}

extension Backup.ListRestoreJobsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRestoreJobsInput {
        return .init(
            byAccountId: self.byAccountId,
            byCompleteAfter: self.byCompleteAfter,
            byCompleteBefore: self.byCompleteBefore,
            byCreatedAfter: self.byCreatedAfter,
            byCreatedBefore: self.byCreatedBefore,
            byResourceType: self.byResourceType,
            byRestoreTestingPlanArn: self.byRestoreTestingPlanArn,
            byStatus: self.byStatus,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListRestoreTestingPlansInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRestoreTestingPlansInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Backup.ListRestoreTestingSelectionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListRestoreTestingSelectionsInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            restoreTestingPlanName: self.restoreTestingPlanName
        )
    }
}

extension Backup.ListTagsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Backup.ListTagsInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            resourceArn: self.resourceArn
        )
    }
}
